Rails与web安全[Web安全大家谈] - 编程入门网
常信息透露给攻击者的,如果异常信息太详细,那么就很 危险了,所以和上面一条一样,要进行异常处理。全局的异常处理。
def rescue_action_in_public(exception) case exception.class.name when ''ActiveRecord::RecordNotFound'',''::ActionController::UnknownAction'',''::ActionController::Rout ingError'' 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 A7 - Broken Authentication and Session Management 1.session hijacking(session劫持). session劫持,是被非法用户拿到整个session信息(cookie).然后让你的所有信息暴露。 how: 是通过网络监听来获取。有些sniffer软件,等等。。。 Countermeasures: 对策1: Encrypt the traffic using SSL 虽然ssl比较慢,但是还是很安全的,需要在environment.rb中加入: ActionController::Base.session_options[:session_secure] = true Rails与web安全[Web安全大家谈](5)时间:2011-11-09 51cto博客 blackanger对策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过期时间。 2.Session fixation(Session定制攻击) how:攻击者通过得到用户合法的session id,并强迫浏览器使用这个session_id 来进行攻击。在php 里,session管理器接受任何的session id,即便这个id不存在,但是ruby on rails里是不可能的,ruby on rails只接受已经生成的session id,所以攻击者会访问这个rails站点来获取合法的session id,然 后传递给第三方用户,如果使用这个session id可以登录成功,那么其他的session id也一样不安全。 在得到session id之后,就会用html 标签<META>来对浏览器注入session id强迫浏览器使用这 个session id来登录站点。 <meta http-equiv=Set-Cookie content="_session_id=4cf69dc5fee46251bdc1f99ef55f52b6"> 这是危险的! 对策: 目前最好的对策是: 用reset_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 存 储器,像插件S |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |