1。慎用get请求,也就是上面所说的, 那些导致对安全产生"副作用"的请求应该总使用Post方式发送。
2。Use the Csrf_killer plugin to include a security token in forms.(插件方式过期,但是使用rails2.0y一下版本的项目需要注意)
在Rails2.0中,通过在form中增加特殊字段来防止CRSF***,这一功能在新应用中默认是开启的。
A6 - Information Leakage and Improper Error Handling
一些重要的信息泄露一般是通过程序里的异常信息透露给***者的,如果异常信息太详细,那么就很危险了,所以和上面一条一样,要进行异常处理。全局的异常处理。
def rescue_action_in_public(exception)
case exception.class.name
when 'ActiveRecord::RecordNotFound','::ActionController::UnknownAction','::ActionController::RoutingError'
RAILS_DEFAULT_LOGGER.error("404 displayed")
render(:file => "#{RAILS_ROOT}/public/404.html", :status => "404 Error")
else
RAILS_DEFAULT_LOGGER.error("500 displayed")
render(:file => "#{RAILS_ROOT}/public/500.html", :status => "500 Error")
end
end
how: 是通过网络监听来获取。有些sniffer软件,等等。。。
Countermeasures:
对策1: Encrypt the traffic using SSL
虽然ssl比较慢,但是还是很安全的,需要在environment.rb中加入:
ActionController::Base.session_options[:session_secure] = true
对策2 : Include additional information (user agent, IP address, …) in the cookie
我们在session里加上一些额外的信息,在每一次请求都去验证它。
对策3 : Create a new session when someone successfully logs in.
用reset_session,但是你不得不把老的session里的数据copy过来。比如user_id.
对策4 : 在用户注销以后让session无效。设置session过期时间。
3.设置cookie过期时间( Expiration of cookies )
1).Client side 客户端可以指定一个固定的时间。e.g :
ActionController::Base.session_options[:session_expires] = Time.local(2007,"jan")
但是记住用户可以改变这个过期时间
2). Server side
Remove old sessions from your hard disk or database Rails默认不会清除session,我们来自己指定。
class SessionCleaner
def self.remove_stale_sessions
CGI::Session::ActiveRecordStore::Session.
destroy_all( ['updated_on <?', 20.minutes.ago] )
end
end
And then invoke the remove_stale_sessions method every 10 minutes via;
*/10 * * * * ruby /full/path/to/script/runner
-e production "SessionCleaner.remove_stale_sessions"
这是防止***者是通过写一个脚本来使用被劫持的session持续***。但是我们需要另一个session 存储器,像插件SQLSessionStore ,或者an update of the ActiveRecordStore migration so it has a created_at field.
A9 - Insecure Communications
不 安全通信,解决这个问题需要用SSL来保护一些敏感的数据。IE 7.0 provides a green bar for high trust SSL certificates,but this is not a suitable control to prove safe use of cryptography alone. 所以企业里用IE一般是不安全的。在安全这方面,我们可以说服企业用户去用firefox
1。采用SSL保护敏感数据。
2。确保这些基础设施之间的通信,比如数据库和web servers之间的通信,是建立在一个安全的传输层或是一个有高度加密的信用协议的基础上。
3。必须遵循PCI 安全标准。比如你需要保护信用卡持有者的信息。