Php 在IE 10中更改页面时,Codeigniter会话被破坏

Php 在IE 10中更改页面时,Codeigniter会话被破坏,php,internet-explorer,codeigniter,session,Php,Internet Explorer,Codeigniter,Session,这听起来很直截了当,但我找不到解决办法。我正在使用最新版本的CI构建一个网站框架。我使用会话来存储访问信息,以允许用户访问某些页面。这在firefox、chrome、safari和IE 9及以下版本中运行良好。然而,在IE10中,当我在框架内更改页面时,会话将自动取消设置。例如,我在一个仪表板上,单击一个链接将我带到localhost/sitename/admin/settings,IE10会破坏所有会话信息,因此我会注销并重定向到登录页面。我试着将sess_cookie_名称改为cisessi

这听起来很直截了当,但我找不到解决办法。我正在使用最新版本的CI构建一个网站框架。我使用会话来存储访问信息,以允许用户访问某些页面。这在firefox、chrome、safari和IE 9及以下版本中运行良好。然而,在IE10中,当我在框架内更改页面时,会话将自动取消设置。例如,我在一个仪表板上,单击一个链接将我带到localhost/sitename/admin/settings,IE10会破坏所有会话信息,因此我会注销并重定向到登录页面。我试着将sess_cookie_名称改为cisessions(我在其他答案中也看到过),但没有效果

有没有其他人遇到过这个问题,或者知道一个有效的解决方案

提前谢谢

编辑:

本应等待发布此邮件:)

经过进一步挖掘,找到了解决方案

$config['sess_cookie_name']  = 'cisession';
$config['sess_match_useragent'] = FALSE;

那么,新的问题是,sess\u match\u useragent对于CI安全目的是否绝对重要,还是可以对所有浏览器保持关闭状态?

这是一个很难客观完整地回答的问题,因为有许多因素在起作用

将用户代理作为会话验证的一部分是有用的,因为它降低了会话劫持的可能性。但是,考虑一下:

  • 使用
    sess\u match\u ip
    是否可以从安全角度匹配或超过
    sess\u match\u useragent
    的有效性?通过匹配IP,攻击者将被要求合法使用相同的IP,或者在访问您的服务器时尝试欺骗它。用户代理验证很容易被欺骗,IP欺骗非常困难,并且可能需要对用户的网络进行压缩以使其有效(例如,同一网络、本地网络或甚至同一计算机上的另一个人)

  • 您是否使用SSL加密来安全地传输数据?如果不是,是否可以想象中间人攻击会使您的应用程序在不考虑用户代理检查的情况下被利用?由于客户端将与服务器通信,而无需加密,因此可以采集、处理和重放整个HTTP请求。如果启用IP检查,这将变得更加困难

  • 在处理安全问题时,您真的希望不同浏览器的服务器端行为有所不同吗?虽然现在看起来似乎无关紧要,但完全可以想象,这种问题也可能会影响其他浏览器的未来版本(或者在未来的IE版本中恢复,以“修复”它)。设计一个解决方案值得你花时间吗


  • 考虑到这一点,我个人的意见是对所有浏览器完全不使用它。Internet Explorer在浏览器市场上仍然占有相当大的份额,而且由于没有编写每个浏览器的修复程序,它似乎不值得实现。考虑到更基本的漏洞利用和IP匹配的可用性,安全优势相对较小,这一点尤其正确。

    您是否检查了IE10默认cookie设置?这种情况是否只发生在CI上,还是也发生在其他站点上?使用数据库作为会话处理程序来避免这种情况可能是一种很好的“黑客行为”(通常比cookies更安全,即使那些cookies是加密的),我具体需要什么设置?$config['sess_use_database']=TRUE;然后,您只需在使用会话时使用它(我的意思是,不涉及任何查询),CI将自动运行自己需要的查询,该设置设置为TRUEalready@K_G转到IE10并刷新页面几次,看看您的useragent是否正在更改。如果是这样的话,你可能在IE10中加载了某种插件,这可能是造成这种情况的原因。通过简单的IP欺骗,重播攻击是微不足道的。当IP欺骗时,攻击者将能够发送合法请求,但不会收到回复。因此,如果请求是说删除某些内容,那么即使有IP保护,攻击也会成功。用户的网络不需要被破坏来欺骗IP。如果您的IP是
    1.2.3.4
    ,您可以发出类似
    /delete.php?id=12
    的请求,我可以在请求中将我的IP欺骗到
    1.2.3.4
    ,然后发送相同的请求,它就会工作。我得到响应并不重要,因为请求是服务器将要处理的。@crypticツ “并且可能需要用户的网络被破坏”-我不是说它需要被破坏,但很可能你在他们的本地网络上,因为几乎所有路由器和防火墙都实施远程来源欺骗保护。该问题询问是否需要用户代理检查设置以确保安全性,这说明它提供的保护是多么微不足道。