2012-04-11 61 views
6

我有一个西纳特拉的应用程序,使用omniauth这constantantly得到这个错误西纳特拉应用得到机架::保护::会话劫持在IE9

attack prevented by Rack::Protection::SessionHijacking 

当我尝试登录(使用谷歌帐户) 。

它在IE浏览器的其他版本以及chrome/firefox/safari上正常工作。

我的设置是

rack (1.4.1) 
rack-force_domain (0.2.0) 
rack-protection (1.2.0) 

sinatra (1.3.2) 
    rack (~> 1.3, >= 1.3.6) 
    rack-protection (~> 1.2) 
    tilt (~> 1.3, >= 1.3.3) 
omniauth (1.0.3) 
    hashie (~> 1.2) 
    rack 

omniauth-google-oauth2 (0.1.9) 
    omniauth (~> 1.0) 
    omniauth-oauth2 
omniauth-oauth2 (1.0.0) 
    oauth2 (~> 0.5.0) 
    omniauth (~> 1.0) 

任何人都知道为什么会这样?

+2

这可能与https://github.com/rkh/rack-protection/issues/11有关 - 如果您有时间,可否请您参与讨论?我很遗憾无法重现这个问题。 – 2012-04-11 09:24:35

+0

好主意 - https://github.com/rkh/rack-protection/issues/11#issuecomment-5066417 – zlog 2012-04-11 11:09:43

回答

8

该模块跟踪USER_AGENT等类似属性(您可以在这里检查它们:https://github.com/rkh/rack-protection/blob/master/lib/rack/protection/session_hijacking.rb)。您得到的这个错误可能是由于这些属性中的一个在会话期间发生了更改。 尝试测试,如果一切只此模块禁止工作:

set :protection, except: :session_hijacking 
+1

啊,禁用session_hijacking确实可以避免错误。我不确定我应该保留它的生产禁用。你知道为什么它只发生在IE9? – zlog 2012-04-11 09:22:07

+0

这是一个很好的问题。也许在IE9中,其中一个标头在某种程度上会发生变化,但这需要一些研究。至于这个模块,它的保护并不是那么强大(所有那些检查过的头文件可能很容易被欺骗),并且*可能会有问题。您还可以采取其他预防措施,通过SSL加密会话密钥等等,请参阅http://en.wikipedia.org/wiki/Session_hijacking – Ernest 2012-04-11 09:47:57

+0

非常感谢!禁用session_hijacking现在可以工作。如果有人很好奇会话环境是如何改变的,我已经在http://gist.github.com/2358527上发布了服务器转储。如果我有机会,我会通过他们潜水。 – zlog 2012-04-11 11:14:35

0

你可以尝试升级您的机架保护宝石V1.5.2或1.5.3(最新)。

他们从session_hijacking库中删除了对HTTP_ACCEPT_ENCODING的跟踪。