【问题标题】:PHP User Agent based session authentication基于 PHP 用户代理的会话身份验证
【发布时间】:2015-03-05 11:46:47
【问题描述】:

我有一个基于用户代理的会话身份验证。每次请求后,我都会检查用户代理是否已更改。如果是这样,则用户已注销(会话可能已被劫持)。

一切都很顺利,直到……一些 IE 用户抱怨 ajax 请求后出现问题。

在几个不眠之夜之后,我开始为每个请求记录用户代理并进行比较。 WTF,如果是 ajax 请求,某些 IE 版本会在用户代理后附加“ICAPoHTTPS”。

有人知道为什么吗?

谢谢,希望对其他人有所帮助...

【问题讨论】:

    标签: php internet-explorer session authentication user-agent


    【解决方案1】:

    有用的消息,没注意到。

    无论如何,我不会使用用户代理,因为它是基于软件/标头的,如果有人能够劫持会话并将 cookie 正确注入浏览器,他可能也能够劫持用户代理字符串并注入它。

    我通常使用 REMOTE_ADDR,这也不会阻止与受害者在同一子网中工作的人。


    编辑:

    您可以通过 ajax 发送您的登录表单来解决此问题,而不是在成功时重定向。假设会话在表单显示上是新鲜的,它将收集标准用户代理字符串,并在登录操作时收集辅助字符串。这样,在您的情况下,您将最多收集两个要检查的用户代理字符串。

    希望您知道这一事实,用户代理是可编辑的标头,可用于inject malicious code/queries

    【讨论】:

    • 我考虑过使用 ip 地址,但在移动设备上通常有动态 IP(即每次请求都会更改我的 ip)。此外,在“正常”互联网连接上,还有动态 ip,如果您的会话时间很长,这可能会导致问题。
    • 您可能希望使用CSRF tokenizing 模式。它有它的缺点,但它是一个相当有抵抗力的解决方案。取决于您从事的服务类型。
    • 我通过从用户代理中删除“ICAPoHTTPS”来修复它。我知道那不是一种干净的方式,但目前应该可以完成这项工作。但将来我肯定会使用 ajax 登录并保存两个用户代理。是的,我知道,但由于我只使用用户代理的哈希,这不应该是一个安全问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-05-17
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多