原文地址:http://guides.rubyonrails.org/security.html
这个指南描述的是在web应用里普遍的安全问题,同时也给出了在Rails里如何避免这些问题。如果你有任何问题,请mail作者,Heiko Webers, at 42 {et} rorsecurity.info. 读完此文后,你应该会了解:
1.所有的对策已经被高亮显示了
2.在Rails里session的概念, 该放什么在session里,以及一些流行的攻击方法
3.只是浏览一个站点,怎么就有安全问题呢?(with CSRF)
4.当你使用files或提供一个管理界面的时候需要注意些什么
5.The Rails-specific mass assignment problem
6.如何管理用户:登陆,注销以及对所有层面的攻击方法。
7.以及最流行的注入攻击方法。
一 介绍
web application框架帮助开发者建立种种web应用,某些框架在安全方面也帮你省心不少。事实上,一个框架并不比另一个安全。对于大多 数的框架来说,如果你正确使用它,可以建立安全的应用。Ruby on Rails有许多聪明的helper方法,例如防止注入攻击的方法,这让sql注入 变成了困难的事情。很高兴看到我审定的所有rails app都有一个良好的安全级别。
一般没有这种即插即用的安全,安全依赖于正在使用的框架,有时候也依赖于开发方式。它取决于web应用的所有环境:后端存储,网络服 务器和网络应用程序本身(以及可能的其他层或应用程序) 。
Gartner组织估计大约75%的攻击都是在web应用,并且在300个调查的web应用里,97%都是容易被攻击的。这是因为web应用容易攻击,因为 它们易于理解和操作,甚至是懒人。
在受到威胁的web应用中,包括用户帐户劫持,绕开访问控制,阅读或修改敏感数据,或出示虚假的内容。或攻击者可以安装一个特洛伊木 马程序或不请自来的电子邮件发送软件,目的是在金融活动或造成损害品牌名称,修改公司的资源。为了防止攻击,最大限度地减少其影响和 消除攻击点,首先,你必须充分了解攻击方法,以便找到正确的对策。这正是该指南的目的。
为了开发安全的Web应用你必须不断更新的所有层次和了解你的敌人。要不断更新订阅的安全邮件列表,请阅读安全博客,并更新和安全检 查的习惯。我手工做这些,因为这你才能找到讨厌的合乎逻辑的安全问题。
二 Sessions
我们的安全之旅最好是从最易受到特别攻击的sessions开始。
2.1 什么是sessions
— HTTP is a stateless protocol Sessions make it stateful.
- HTTP是一个无状态协议,Sessions使它有状态。
大多数的应用需要对一个特别用户的某些状态进行跟踪。比如,一个购物车的内容,一的当前登陆用户的id,如果没有sessions这个好主意 ,用户必须在每一个请求都得去标识验证身份。如果一个新用户访问这个应用,Rails会自动创建一个新的session。如果用户之前使用过这个 应用,它会自动加载一个存在的session。
一个session通常是一个hash和一个session id(通常是一个32个字符的字符串)来标识这个hash。Rails里你可以用如下方式保存和使用 session:
session[:user_id] = @current_user.id
User.find(session[:user_id])
2.2 session id
— The session id is a 32 byte long MD5 hash value.
- session id就是个一32位的md5 hash值。
一个session id由一个随机字符串的hash值组成。这个随机字符串是当前的时间,一个0和1之间的随机数字,一个ruby解释器进程id数字和 一个常量字符串组成。