Rails Guides - Ruby on Rails 安全指南
Posted 柚长成记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails Guides - Ruby on Rails 安全指南相关的知识,希望对你有一定的参考价值。
一、简介
安全性取决于:如何使用框架、开发方式、web应用环境的各个层面(75%):后端存储、web服务器、web应用自身。
安全威胁包括:账户劫持、绕过访问控制、读取或修改敏感数据、显示欺诈信息
二、会话
作用:跨请求跟踪特定用户的某些状态,例如购物车商品,当前登陆用户的ID
组成:值的哈希跟会话ID。会话ID用于标记哈希值,是由32个字符组成的字符串
位置:客户端浏览器的每个cookie都包含会话iD,客户端发送到服务器的每个请求中也包含会话ID
存取方法:同hash
会话安全指南:会话中不要存储大型对象,可以避免同步问题,而且节省会话存储空间;会话中不要存储关键数据
会话存储:rails默认cookiestore,把会话散列而不是会话ID存储在cookie中,优点是可以显著提高应用的运行速度,缺点是客户端可以看到存储在cookie中的会话内容,会引起安全威胁。对策是使用EncryptedCookieStore,将会话加密之后再存进cookie,通过密钥加密,密钥通过rails secret生成,存储在config/secrets.yml的secret_key_base中。
会话劫持:通过窃取用户的会话ID,攻击者能够以受害者的身份使用web应用。
对cookiestore会话的重放攻击:通过复制之前的cookie来替换现在的cookie,以获得原来的数据。对策:会话中包含随机数,每个随机数验证之后就失效;不要把敏感数据存在会话中。
会话固定攻击:强制用户的浏览器使用攻击者提供的会话ID,对策:使用devise,在登陆和退出的时候会让原有会话过期;会话中存储和用户属性相关的数据,请求前先验证。
三、跨站请求伪造CSRF
原理:通过在页面中包含恶意代码或链接,访问已验证用户才能访问的web应用
对策:
适当使用get和post方法
非get请求要使用只有服务器端才知道的安全令牌
禁用<script>,Ajax请求返回js是安全的
四、重定向和文件
重定向
钓鱼攻击:把用户访问跳转到恶意网站
通过把恶意网站的url放在重定向参数中
对策:使用白名单检查
文件上传
攻击者通过制定恶意文件名覆盖服务器的文件,对策:设置白名单,过滤用户输入的文件名,不要尝试去删除文件名的恶意部分
同步上传文件有拒绝服务攻击DoS的风险,对策:媒体文件异步上传
上传文件中的可执行代码,对策:不要在Apach的/public的文件夹中存储文件
随意下载文件,对策:检查所请求的文件是不是在规定的文件中
五、局域网和管理界面的安全
通过XSS以及CSRF:
窃取具有特权的管理员的cookie
注入iframe窃取管理员密码
通过浏览器漏洞安装恶意软件
预防措施:
管理界面引入用户角色权限设计
管理界面启用特殊的登陆账号密码
对于特别重要的操作,设置专用密码
登陆界面的IP进行限制
注意用户是否使用了代理服务器
通过专用子域名访问管理界面
六、用户管理
问题:
暴力破解账户:对账号密码试错攻击,对策:较为模糊的错误信息,要求输入验证码
账户劫持:窃取密码以及修改电子邮箱,都可以通过要求输入旧密码来防治
建议:
授权和身份验证使用插件devise或者authlogic
验证码插件:判断响应是否由计算机生成。积极验证码:reCAPTCHA,通过扭曲图形验证。消极验证码:通过增加蜜罐字段防止笨拙的机器人。
日志:不要把密码写入日志,配置:config.filter_parameters
好的密码:大小写字母和数字的混合长密码
正则表达式:错误的行首行尾:^ 以及 $,正确的行首行尾:\A 以及 \z
七、注入攻击
SQL注入攻击:是毁灭性的攻击方式,通过篡改传入web应用的参数来影响数据库查询,绕过权限,执行数据库操作,读取任意数据。对策:rails内置了针对特殊SQL字符的过滤器;通过?占位符传入数组而不是直接传入字符串;where查询用hash
跨站脚本XSS:影响范围广,破坏性强。切入点是url以及参数。使用html/JS进行XSS,窃取cookie,通过增加httpOnly标志禁止读取cookie;涂改信息提供虚假信息。对策是对用户输入进行白名单过滤和进行转义,而且web输出也要转义。
CSS注入:实质是JS注入,有的浏览器中的CSS可以使用JS,对策是不让用户输入css,而是让他选择,应用生成。
Ajax注入:控制器动作返回字符串而不是渲染视图时,转义返回值。
命令行注入:system(command, parameters)传递命令行参数更安全
首部注入:在首部动态生成的过程中可能包含用户注意的信息,注入回车换行符。例如造成响应拆分:首部中插入两个回车换行符,之后紧跟恶意的另一个响应。对策:转义这些首部字段,设置默认的安全首部
八、环境安全
保护好:
数据库配置:config/database.yml
服务器端密钥:config/secrets.yml,中通过secret_key_base定义,通过Rails.application.secrets访问。
以上是关于Rails Guides - Ruby on Rails 安全指南的主要内容,如果未能解决你的问题,请参考以下文章
思考Ruby On Rails的底层代码(Ruby on Rails 開發秘籍 | Ruby on Rails 快速入門)