快速业务通道

Rails与web安全[Web安全大家谈] - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
常信息透露给攻击者的,如果异常信息太详细,那么就很 危险了,所以和上面一条一样,要进行异常处理。全局的异常处理。

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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号