- 浏览: 442187 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (470)
- 前言 (1)
- 【sys】centos6.2 (51)
- 【sys】shell (8)
- 【sys】yum (1)
- software (6)
- 【tec】ruby (16)
- 【tec】rails (35)
- 【tec】rails路由 (2)
- 【tec】rails部署 (10)
- 【tec】rails优化 (6)
- 【tec】rails测试 (11)
- 【tec】php (45)
- 【tec】android (1)
- 【tec】ios (125)
- 【data】mysql (11)
- web (6)
- 【life】文学与提升 (2)
- life (36)
- 【life】怀念 (1)
- 【web】nginx (5)
- 【web】网络与安全 (4)
- 工作随笔 (1)
- 【software】svn (5)
- 【script】jquery (10)
- powerEdge (2)
- 杂七杂八 (5)
- 【sys】ubuntu (9)
- 【sys】windows (4)
- 【tec】java (1)
- 【tec】html (3)
- 【tec】c++ (38)
- 【tec】汇编 (1)
- 【data】数据库 (1)
- 【exchange 】学术交流 (1)
- 【tec】域名空间 (1)
- 【tec】编程先知 (1)
- 【tec】网站建设 (7)
- 【sys】mac (24)
- 【sys】seo (1)
- 【tec】wp (1)
- 【software】git (4)
最新评论
-
fireDragonpzy:
呵呵 貌似我网站上的有更新 你从那里看看 这个博客维护的不及时 ...
牛人经典语录 -
Peppermintchz:
还真这么2过啊!!好怀念啊
牛人经典语录 -
fireDragonpzy:
chenhong53 写道你好,我想问一下,能不能给一组精灵数 ...
cocos2d-x事件触发的优先级 -
chenhong53:
你好,我想问一下,能不能给一组精灵数组中的精灵添加触屏优先级, ...
cocos2d-x事件触发的优先级 -
fireDragonpzy:
dreamstar1020 写道谢谢庞兄指点,写的很详细,谢谢 ...
致:上海郑兄(虚拟主机-web服务器搭建)
因为在论坛http://www.ruby-lang.org.cn/上有drive2me兄问rails的安全性如何,而我也不是很了解,所以
在网络上学习了一下,下面就是一些总结,一来是帮助drive2me兄,回答他的问题,一来也是备忘,希望有更多人研究rails的安全性,写出更安全的webapp。
1. ruby的安全机制
参考《programming ruby》中的Locking ruby in safe一章。
主要说明了安全级别和脏对象。
脏对象(tainted object):所有外部数据都是危险的,比如对表单提交的数据进行eval操作就会造成很严重的安全问题。
所有从外部进入的ruby解释器的数据都可以被标记为脏对象(tainted),
当ruby解释器运行在某一个安全模式下时,有危险的方法调用将导致系统抛出SecurityException.
变量$SAFE决定ruby的“怀疑级别”。数字越低越不安全。
$SAFE=0 让ruby不检查外部提供的脏(tainted)数据的使用情况,这是ruby的默认模式。
$SAFE>=1 让ruby不允许脏(tainted)数据使用可能有危险的方法,比如eval。
$SAFE>=2 让ruby不允许从全局可写位置装载程序。
$SAFE>=3 让ruby把所有新创建的对象都认为是脏的(tainted).并且不能把一个脏对象untaint.
$SAFE>=4 让ruby有效地把正在运行的程序划分成两部分,脏的和干净的。
$SAFE变量一旦设置了一个值,就不可能再设置为更低的值了。
$SAFE值是线程独立的,新线程会继承当前的$SAFE值,但是新线程可以修改这个值,而其它线程不受影响。
使用这个机制可以实现一个沙盒,用来运行外部的程序。例如:
创建一个Proc对象时,实际的安全级别被存储在该对象中。如果这个Proc对象是脏的(tainted), 并且
当前的安全级别大于这个Proc对象的实际安全级别,那么,这个Proc对象是不能被传递给其它方法去使用的。
脏对象:ruby解释器自动地把任何从外部得到的对象都标记为脏对象(tainted object).比如从环境变量中得到
的string对象,从文件中读取的string对象等。
你的程序从脏对象得到的新对象也会被标记为脏对象,比如:
2. webapp共有的安全问题
= SQL Injection (SQL注入):
问题:因为不对来自于外部的数据按照sql的元字符进行转义,比如不对"/","'"等字符进行sql转义,从而
使得黑客可以改变WHERE子句条件来增删改数据,甚至是执行任意的sql语句。
如何避免:rails自动处理这些需要转义的字符。如果你自己写了condition, limits, order 那么你必须
正确转义这些危险的字符。
例子:
错误的用法:
攻击方法: 提供subject的内容为" 'or 1 --' ".
解决办法:
或者:
= Cross Site Scripting (CSS/XSS) (跨站脚本) :
浏览器的用户使用cookie来跟踪session,CSS是一种盗取cookie,最后盗取session登录权限的技术。
cookie只能被创建它的domain访问到。最简单的办法就是放一段恶意javascript在目标网站(要盗取用户权限的网站)
中,当用户访问目标网站时,打开的页面中会执行恶意javascript代码,因为来自于目标网站,所以恶意代码可以访问
用户的当前cookie,于是把这些数据放入url参数中传递到攻击者的网站去。
例子:
错误的写法:<%= @params['text'] %>
攻击方法:提交的参数写为 <script>alert(document.cookie)</script>,让受害者打开这个目标网站的受攻击
页面,从而把受害者的cookie传到攻击者的网站去。
解决办法:把每个会在页面中显示的语句都进行html转义。用<%=h @params['text'] %>
用echo服务造成的CSS攻击:因为echo服务会把收到的内容原封不动地返回去,所以攻击者会让受害者打开一个含有
向目标网站发送带有传递cookie信息的javascript脚本,当浏览器收到echo服务返回的内容时,有些IE会渲染这
个页面,并执行其中的javascript代码,从而把cookie发送到攻击者的网站去。用于攻击的页面内容如下:
解决办法:关闭目标服务器上可能造成CSS攻击的echo服务和其它服务(FTP,POP3等)。
有专门的网站记录CSS攻击事件:http://www.xssed.com/
= Session hijacking (session 劫持):
攻击者通过 sniffing 不安全网络,获取别人的cookie.然后使用该cookie登录目标网站。
解决办法:
*告诉浏览器传送cookie时使用ssl.
*登出后销毁session: session[:user_id] = nil
*登录成功后创建并复制一个新的session.需要复制旧session的所有对象。 用reset_session方法实现。
= Session fixation (session 固化):
攻击者设法让受害者使用攻击者已知的一个session identifier(session标识)来进行登录。
第一步,攻击者创建一个有效的session identifier,rails不接受任意形式的session identifier,而php接受,
所以攻击者必须要访问目标网站才能攻取到rails产生的session identifier,从这点看rails比php安全。
第二步,攻击者设法让受害者的浏览器使用这个session identifier去登录,这被称作"真实session固化".
真实session固化的一个方法是把受害者的网络请求中途截断,然后改写目标网站返回的session identifier.
等受害者登录网站后,攻击者就可以在受害者退出前使用受害者的登录帐号了。
解决办法:
*不在公共页面上创建有效的session. 可以使用controller的sessionff方法关闭所有method的session产生。
*在成功登录后,创建一个新的session. reset_session.
*有效地设置cookie的过期时间。
= Cross-site Request Forgery (跨站请求伪造)
攻击者设法让受害者打开一个网页,或者打开一封邮件,其中有图片链接,这个链接会让用户向他已经登录的网站发起一个
请求,来做一些受害者不知道的事情,比如修改密码、下订单、删除数据等等。攻击用的url类似:
<img src="http://www.application.com/order/20/delete" />
解决办法:
*正确使用GET/POST方法,GET读取数据,POST修改数据。
*使用CSRF-KILLER插件为请求加上token(令牌).
3. rails自身使用不当造成的安全隐患(mass-assignment problem)
= 直接用表单创建记录, 也被称作 mass-assignment 问题
普通的写法:
User.create(@params['user'])
恶意代码:
解决办法:
attr_protected, 加手工赋值, user.approved = sanitize_properly(@params['user']['approved'])
attr_accessible :name, :password, 让rails默认情况下不让任何属性能够"mass-assignment"除非
显式地说明该属性可以批量访问(mass-assignment)。
= rails自身的安全问题:
http://blog.evanweaver.com/articles/2006/08/12/anatomy-of-an-attack-against-1-1-4/
4. help tools
safeERB
csrf-killer
5. 我的结论
rails提供了很多安全方面的功能,所以开发一个安全的webapp用rails会比其它webapp框架容易。
webapp面临的大都数安全问题是共有的,并非应用rails而造成的,反而rails提供的很多安全化手段可以让webapp变得
更加安全。
当然rails和ruby程序自身也有一些安全隐患,但并不是致命和不可克服的,需要紧跟rails和ruby官方网站发布的安全
声明。
参考资料:
<<programming ruby 2nd>> (Table 25.1. Definition of the safe levels)
http://www.rorsecurity.info/ruby-on-rails-security-cheatsheet/
http://ianloic.com/insecurity_is_ruby_on_rails_best_practice
http://www.lonerunners.net/blog/archives/1028-Rails-Security-Secure-your-Ruby-on-Rails-web-application.html
http://sonjayatandon.com/05-2006/how-to-build-a-secured-web-application-with-ruby-on-rails/
http://manuals.rubyonrails.com/read/chapter/47
http://erlend.oftedal.no/blog/?blogid=20
http://manuals.rubyonrails.com/read/book/8
http://www.slideshare.net/amiable_indian/ruby-on-rails-security
出处:http://blog.csdn.net/yangbo_hr/article/details/2008183
在网络上学习了一下,下面就是一些总结,一来是帮助drive2me兄,回答他的问题,一来也是备忘,希望有更多人研究rails的安全性,写出更安全的webapp。
1. ruby的安全机制
参考《programming ruby》中的Locking ruby in safe一章。
主要说明了安全级别和脏对象。
脏对象(tainted object):所有外部数据都是危险的,比如对表单提交的数据进行eval操作就会造成很严重的安全问题。
所有从外部进入的ruby解释器的数据都可以被标记为脏对象(tainted),
当ruby解释器运行在某一个安全模式下时,有危险的方法调用将导致系统抛出SecurityException.
变量$SAFE决定ruby的“怀疑级别”。数字越低越不安全。
$SAFE=0 让ruby不检查外部提供的脏(tainted)数据的使用情况,这是ruby的默认模式。
$SAFE>=1 让ruby不允许脏(tainted)数据使用可能有危险的方法,比如eval。
$SAFE>=2 让ruby不允许从全局可写位置装载程序。
$SAFE>=3 让ruby把所有新创建的对象都认为是脏的(tainted).并且不能把一个脏对象untaint.
$SAFE>=4 让ruby有效地把正在运行的程序划分成两部分,脏的和干净的。
$SAFE变量一旦设置了一个值,就不可能再设置为更低的值了。
$SAFE值是线程独立的,新线程会继承当前的$SAFE值,但是新线程可以修改这个值,而其它线程不受影响。
使用这个机制可以实现一个沙盒,用来运行外部的程序。例如:
f=open(filename,"w") f.print ... # write untrusted program into file. f.close Thread.start do $SAFE = 4 load(filename, true) # wrapp 到一个匿名模块中去。 end
创建一个Proc对象时,实际的安全级别被存储在该对象中。如果这个Proc对象是脏的(tainted), 并且
当前的安全级别大于这个Proc对象的实际安全级别,那么,这个Proc对象是不能被传递给其它方法去使用的。
脏对象:ruby解释器自动地把任何从外部得到的对象都标记为脏对象(tainted object).比如从环境变量中得到
的string对象,从文件中读取的string对象等。
你的程序从脏对象得到的新对象也会被标记为脏对象,比如:
y1 = ENV["HOME"] y1.tainted? # => true y2 = y1[2, 4] y2.tainted? # => true
2. webapp共有的安全问题
= SQL Injection (SQL注入):
问题:因为不对来自于外部的数据按照sql的元字符进行转义,比如不对"/","'"等字符进行sql转义,从而
使得黑客可以改变WHERE子句条件来增删改数据,甚至是执行任意的sql语句。
如何避免:rails自动处理这些需要转义的字符。如果你自己写了condition, limits, order 那么你必须
正确转义这些危险的字符。
例子:
错误的用法:
Email.find_all "owner_id = 123 AND subject = '#{@params['subject']}'"
攻击方法: 提供subject的内容为" 'or 1 --' ".
解决办法:
subject = @params['subject'] Email.find_all [ "owner_id = 123 AND subject = ?", subject ]
或者:
Email.find_by_sql "SELECT * FROM email WHERE owner_id = 123 AND subject = #{Email.quote(subject)}"
= Cross Site Scripting (CSS/XSS) (跨站脚本) :
浏览器的用户使用cookie来跟踪session,CSS是一种盗取cookie,最后盗取session登录权限的技术。
cookie只能被创建它的domain访问到。最简单的办法就是放一段恶意javascript在目标网站(要盗取用户权限的网站)
中,当用户访问目标网站时,打开的页面中会执行恶意javascript代码,因为来自于目标网站,所以恶意代码可以访问
用户的当前cookie,于是把这些数据放入url参数中传递到攻击者的网站去。
例子:
错误的写法:<%= @params['text'] %>
攻击方法:提交的参数写为 <script>alert(document.cookie)</script>,让受害者打开这个目标网站的受攻击
页面,从而把受害者的cookie传到攻击者的网站去。
解决办法:把每个会在页面中显示的语句都进行html转义。用<%=h @params['text'] %>
用echo服务造成的CSS攻击:因为echo服务会把收到的内容原封不动地返回去,所以攻击者会让受害者打开一个含有
向目标网站发送带有传递cookie信息的javascript脚本,当浏览器收到echo服务返回的内容时,有些IE会渲染这
个页面,并执行其中的javascript代码,从而把cookie发送到攻击者的网站去。用于攻击的页面内容如下:
<form action="http://target.domain:7/" method="post"> <input type="hidden" name="code" value="some_javascript_code_here" /> <input type="submit" /> </form>
解决办法:关闭目标服务器上可能造成CSS攻击的echo服务和其它服务(FTP,POP3等)。
有专门的网站记录CSS攻击事件:http://www.xssed.com/
= Session hijacking (session 劫持):
攻击者通过 sniffing 不安全网络,获取别人的cookie.然后使用该cookie登录目标网站。
解决办法:
*告诉浏览器传送cookie时使用ssl.
ActionController::Base.session_options[:session_secure] = true
*登出后销毁session: session[:user_id] = nil
*登录成功后创建并复制一个新的session.需要复制旧session的所有对象。 用reset_session方法实现。
= Session fixation (session 固化):
攻击者设法让受害者使用攻击者已知的一个session identifier(session标识)来进行登录。
第一步,攻击者创建一个有效的session identifier,rails不接受任意形式的session identifier,而php接受,
所以攻击者必须要访问目标网站才能攻取到rails产生的session identifier,从这点看rails比php安全。
第二步,攻击者设法让受害者的浏览器使用这个session identifier去登录,这被称作"真实session固化".
真实session固化的一个方法是把受害者的网络请求中途截断,然后改写目标网站返回的session identifier.
等受害者登录网站后,攻击者就可以在受害者退出前使用受害者的登录帐号了。
解决办法:
*不在公共页面上创建有效的session. 可以使用controller的sessionff方法关闭所有method的session产生。
*在成功登录后,创建一个新的session. reset_session.
*有效地设置cookie的过期时间。
= Cross-site Request Forgery (跨站请求伪造)
攻击者设法让受害者打开一个网页,或者打开一封邮件,其中有图片链接,这个链接会让用户向他已经登录的网站发起一个
请求,来做一些受害者不知道的事情,比如修改密码、下订单、删除数据等等。攻击用的url类似:
<img src="http://www.application.com/order/20/delete" />
解决办法:
*正确使用GET/POST方法,GET读取数据,POST修改数据。
*使用CSRF-KILLER插件为请求加上token(令牌).
3. rails自身使用不当造成的安全隐患(mass-assignment problem)
= 直接用表单创建记录, 也被称作 mass-assignment 问题
普通的写法:
<form method="post" action="http://website.domain/user/register"> <input type="text" name="user[name]" /> <input type="text" name="user[password]" /> </form>
User.create(@params['user'])
恶意代码:
<form method="post" action="http://website.domain/user/register"> <input type="text" name="user[name]" /> <input type="text" name="user[password]" /> <input type="text" name="user[role]" value="Admin" /> <input type="text" name="user[approved]" value="1" /> </form>
解决办法:
attr_protected, 加手工赋值, user.approved = sanitize_properly(@params['user']['approved'])
attr_accessible :name, :password, 让rails默认情况下不让任何属性能够"mass-assignment"除非
显式地说明该属性可以批量访问(mass-assignment)。
= rails自身的安全问题:
http://blog.evanweaver.com/articles/2006/08/12/anatomy-of-an-attack-against-1-1-4/
4. help tools
safeERB
csrf-killer
5. 我的结论
rails提供了很多安全方面的功能,所以开发一个安全的webapp用rails会比其它webapp框架容易。
webapp面临的大都数安全问题是共有的,并非应用rails而造成的,反而rails提供的很多安全化手段可以让webapp变得
更加安全。
当然rails和ruby程序自身也有一些安全隐患,但并不是致命和不可克服的,需要紧跟rails和ruby官方网站发布的安全
声明。
参考资料:
<<programming ruby 2nd>> (Table 25.1. Definition of the safe levels)
http://www.rorsecurity.info/ruby-on-rails-security-cheatsheet/
http://ianloic.com/insecurity_is_ruby_on_rails_best_practice
http://www.lonerunners.net/blog/archives/1028-Rails-Security-Secure-your-Ruby-on-Rails-web-application.html
http://sonjayatandon.com/05-2006/how-to-build-a-secured-web-application-with-ruby-on-rails/
http://manuals.rubyonrails.com/read/chapter/47
http://erlend.oftedal.no/blog/?blogid=20
http://manuals.rubyonrails.com/read/book/8
http://www.slideshare.net/amiable_indian/ruby-on-rails-security
出处:http://blog.csdn.net/yangbo_hr/article/details/2008183
发表评论
-
Google:host配置
2012-10-18 08:42 813详情请参考:【Software Myzone】:http:// ... -
Ruby on Rails 性能优化工具
2012-05-15 08:43 671http://www.oschina.net/news/269 ... -
论 Ruby 顶层及 Object、Kernel 的关系
2012-05-14 10:44 957http://szsu.wordpress.com ... -
网页中 pdf查看
2012-05-06 16:24 814centos:仿百科--http://www.centos.b ... -
rails走验证和不走验证方法汇总
2012-05-06 16:13 693走validation的方法: create ... -
ruby调用win32ole打开文件
2012-05-03 20:58 797http://www.iteye.com/topic/1168 ... -
http报头
2012-05-03 19:35 644http://wenku.baidu.com/view/3ef ... -
rails规范
2012-04-28 13:21 1029Ruby on rails 开发规范 (一 ... -
ruby基础
2012-04-16 11:25 661http://www.oschina.net/code/lis ... -
nginx + rails 防盗链
2012-04-16 11:12 666iteye:http://ywencn.iteye.com/b ... -
rails invalid date
2012-04-15 10:54 773迁移数据库或者是跑网站的时候出现:invalid date ... -
ror技巧--空判断
2012-03-30 13:23 817取某个对象的一个属性,先判断对象是否为nil,不是nil就返回 ... -
rails 数据库配置
2012-03-26 10:43 981驱动配置: Gemfile:gem 'mysql2', '0 ... -
spork+rspec-rails
2012-03-19 14:19 766http://www.rubyinside.com/how-t ... -
libmysqlclient.so.18错误
2012-03-17 13:08 2530设置libmysqlclient的软链,防止编译其它依赖Mys ... -
ruby base之字符串操作
2012-03-12 11:20 7451 字符串的截取:str[0,str.length-1] -
rails测试工具--rspec
2012-03-09 11:26 822http://article.yeeyan.org/view/ ... -
rails命令大全
2012-03-09 10:54 8751、创建一个Rails应用程序 $ rails app_na ... -
rails命名约定
2012-03-02 15:49 724rails命名约定 -
Rails中的link_to方法注意点
2012-02-21 19:53 693http://www.blogjava.net/pengpen ...
相关推荐
本书从Ruby和Rails的历史讲起,以在Rails框架上克隆故事共享网站digg.com为例,详细讲述了Ruby和Rails的安装过程、框架组成部分、与AJAX和Web 2.0技术结合、安全措施、高级话题和扩展功能等。本书带领读者运用最新...
本书从Ruby和Rails的历史讲起,以在Rails框架上克隆故事共享网站digg.com为例,详细讲述了Ruby和Rails的安装过程、框架组成部分、与AJAX和Web 2.0技术结合、安全措施、高级话题和扩展功能等。本书带领读者运用最新...
本书从Ruby和Rails的历史讲起,以在Rails框架上克隆故事共享网站digg.com为例,详细讲述了Ruby和Rails的安装过程、框架组成部分、与AJAX和Web 2.0技术结合、安全措施、高级话题和扩展功能等。本书带领读者运用最新...
本书从Ruby和Rails的历史讲起,以在Rails框架上克隆故事共享网站digg.com为例,详细讲述了Ruby和Rails的安装过程、框架组成部分、与AJAX和Web 2.0技术结合、安全措施、高级话题和扩展功能等。本书带领读者运用最新...
由于安全和兼容性问题,将继续对 gem进行维护,但是我们不再接受新功能。 我们仍在积极维护redis-store系列中的所有其他gem,例如用于会话管理的和用于HTTP缓存存储的 。 安装 将以下内容添加到您的Gemfile中: ...
本书从Ruby和Rails的历史讲起,以在Rails框架上克隆故事共享网站digg.com为例,详细讲述了Ruby和Rails的安装过程、框架组成部分、与AJAX和Web 2.0技术结合、安全措施、高级话题和扩展功能等。本书带领读者运用最新...
很棒的Rails安全性 Ruby on Rails应用程序安全资源的精选列表 目录 资源 官方资源 实验室-脆弱的应用程序 最佳实践 反模式 附加阅读 报告错误 宝石 身份验证和OAuth Devise-带Warden的Rails的灵活身份验证解决...
Ruby on Rails的行级安全性行级安全性(RLS)是PostgreSQL一项功能(请参阅和 ),它允许您定义规则以检查SELECT,INSERT,UPDATE或DELETE是否正在访问或创建合法行。 在多用户应用程序中隔离数据时,RLS为您的应用...
此外,可以在以下位置找到其他资源: 入门和配置文档请参阅带有文章和其他文档的 来自: 查看对于一般性问题,请在有关此项目的安全披露政策,请参阅 。安装安装取决于您使用的框架。 第一步是将以下内容添加到您的...
做得好 GoodJob是Ruby on Rails的基于Postgres的... 依靠Postgres完整性,会话级咨询锁来提供一次性安全性,并保持在schema.rb和LISTEN / NOTIFY的限制内,以减少排队等待时间。 对于大多数工作负载。 目标是全职团队,
Zen Rails安全清单概要本文档提供了开发Ruby on Rails应用程序时要实施的安全措施的不一定全面的列表。 它旨在用作快速参考,并最大程度地减少开发人员健忘造成的漏洞。 它并不能替代开发人员有关安全编码原则以及...
带有Ruby on Rails框架的教育博客。 Ruby 2.7版 Ruby on Rails 6.0.3 数据库Sqlite3(一对多和多对多关联) 代表性状态转移(REST) Bootstrap 4.4.1的前端样式 建议在Heroku平台上进行部署 预览 该博客包括...
Rails安全审核列表 0.安全宝 用于Ruby on Rails应用程序的静态分析安全漏洞扫描程序 -机架中间件,用于阻止和限制 与安全性相关的标头全部包含在一个gem中 用于ruby编写的Web应用程序的静态分析安全扫描程序。 带...
它遵循社区在标准,安全性和可维护性方面的最佳做法,并集成了各种测试和代码质量工具。 它基于Rails 6和Ruby 2.7。 最后,它包含一个可玩的管理控制台插件(感谢 )。产品特点该模板随附: 架构图用户表管理员用户...
两因素身份验证(“ 2FA”)是您网站安全性的增强。 用户提供密码,然后连接USB安全密钥。 密码被盗不再是灾难。 Google发起了一个名为FIDO的行业联盟,以创建一个非常聪明的标准,称为Univers
运行多种审核和审查工具,以确保Rails项目的质量和安全性 用法 gem install rails-audit rails-audit 审核工具的次要版本已针对该gem的特定版本进行了修复。 除了这些工具中的错误修复之外,如果项目包中包含此gem...
在会话中简单地设置用户ID的“传统”方式是不安全且不明智的。 如果仅执行以下示例中的操作,则意味着有权访问会话cookie的任何人都可以随时随地以用户身份登录。 需要说明的是:尽管默认情况下,Rails会话cookie...
Gemfile还包含一组用于性能,安全性和api构建的有用的gem ... 线程安全 我们假定此应用程序是线程安全的。 如果您的应用程序不是线程安全的或者您不知道,请将puma在Heroku上可用的最小和最大线程数设置为1: $ ...
在内部,我们通过此gem将这些最佳实践应用于我们的Rails应用程序,该更新更新了ActiveRecord迁移,以清楚地描述安全和不安全的DDL,并在可能的情况下提供安全的替代方法。 一些项目试图通过让代码确定意图并神奇地...
该宝石可帮助您保持或提高项目的质量,良好做法和安全性。 Massa可以使用不同的代码分析器工具与自动化测试一起在您的CI中运行,而不是仅运行自动化测试。 即:代替: $ bundle exec rubocop && bundle exec ...