Rails不安全默认配置.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Rails 不安全的默认配置是构建安全系统的关键。 如果一个开发人员必须采取明确的行动,落实安全行为,最终甚至有经验的开发人员会忘记这样做。 出于这个原因,安全专家说: “不安全的默认情况下是不安全的。” Rails的声誉作为一个相对安全的Web框架是当之无愧的。 开箱即用的,有防止许多常见的攻击:跨站点脚本攻击(XSS)、跨站点请求伪造(CSRF)和SQL注入。 核心成员都是知识渊博的,真正关心安全。 然而,有些地方默认行为可能更安全。 这篇文章探讨了潜在的安全问题在Rails 3固定在Rails中4,以及一些仍冒险。 我希望这篇文章将帮助你确保你自己的应用程序,以及激发改变Rails本身。 Rails 3的问题 让我们先看一些Rails 3问题解决在主。 Rails团队的功劳是解决这些,但他们是值得注意的是由于许多应用程序将运行在Rails 2和3多年来。 1。 通过比赛路线CSRF漏水的# 下面是一个示例直接取自Rails 3生成的?config /路线rb?文件: 1234567 WebStore::Application.routes.drawdo# Sample of named route:matchproducts/:id/purchase=catalog#purchase,:as=:purchase# This route can be invoked with# purchase_url(:id = product.id)end 有这样的效果:路由了?/产品/:id /购买?路径?CatalogController #购买?方法?对于所有的HTTP动词?(?得到?,?邮报?等)。 问题是,Rails的跨站点请求伪造(CSRF)保护并不适用?得到请求。 你可以看到这个方法执行CSRF保护:defverified_request?!protect_against_forgery?||request.get?||form_authenticity_token==params[request_forgery_protection_token]||form_authenticity_token==request.headers[X-CSRF-Token]end 第二行失去CSRF检查:它意味着如果?请求得到吗??是?真正的?,请求被认为是“验证”和CSRF检查被跳过。 事实上,在Rails源有一个评论以上这个方法,说: 应该是安全的和幂等的获得。 在你的应用程序,你可能总是使用?邮报?使请求?/产品/:id /购买?。 但由于路由器允许?得到请求,?攻击者可以平凡地绕过CSRF保护任何方法路由通过?#匹配?助手。?如果你的应用程序使用旧的通配符路线(不推荐),CSRF保护是完全无效的。 最佳实践:?不要使用?得到?对不安全的行为。 不要使用?#匹配?添加路线(而不是使用?#职位?,#把?等等)。 确保你没有通配符路线。 解决办法:?Rails现在需要您指定特定的HTTP动词或不是?通过::所有?当添加路线和?#匹配?。 生成的?config /路线rb?不再包含注释掉了?#匹配?路线。 (通配符路线也删除)。 2。 正则表达式锚在格式验证 考虑下面的验证: 1 validates_format_of:name,with: /^[a-z ]+$/i 这段代码通常是一个微妙的bug。 开发人员可能意味着执行,整个名称属性只包含字母和空格。 相反,这只会加强?至少一行?在的名字是由字母和空格。 正则表达式匹配的一些例子使它更清楚:/^[a-z ]+$/i=~Joe User=0# Match/^[a-z ]+$/i=~ ); -- foo=nil# No match/^[a-z ]+$/i=~a\n ); -- foo=0# Match 开发人员应该使用?\一个?(开始的字符串)和?\ z?(结束的字符串)锚代替?^?(开始的线)和?$(行结束)。 正确的代码是: 1 validates_format_of:name,with: /\A[a-z ]+\z/i 你可能会争辩说,开发商的错,和你会是正确的。 然而,正则表达式的行为并不明显,锚尤其是开发人员不考虑多行值。 (也许只是公开的属性文本输入字段,从来没有一个?textarea?)。 Rails是在正确的地点在堆栈保存开发人员从自己和这正是已经完成在Rails中4。 最佳实践:?每逢可能,使用?\一个?和?\ z?锚定正则表达式代替?^?和?$?。 解决办法:?Rails 4介绍了?多行?选择?验证格式的?。 如果你的正则表达式是固定使用?^?和?$而不是?\一个?和?\ z?和你不通过?多行:真?,Rails将引发一个异常。 这

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档