【问题标题】:Checking user agent in cookies, minor changes检查 cookie 中的用户代理,小改动
【发布时间】:2013-09-07 04:25:01
【问题描述】:

当用户登录我的网站时,我会在他的浏览器中添加一个加密的 cookie。当他回来时,我会检查各个方面,包括用户代理。

但似乎非常小的更改使此检查过时了。下面的例子。用户登录时第一个,用户稍后回来时第二个:

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36

Opera/9.80 (Series 60; Opera Mini/7.1.32448/30.3793; U; tr) Presto/2.8.119 Version/11.10
Opera/9.80 (Series 60; Opera Mini/7.1.32448/31.1325; U; tr) Presto/2.8.119 Version/11.10

Opera/9.80 (Android; Opera Mini/7.5.33361/31.1312; U; tr) Presto/2.8.119 Version/11.10
Opera/9.80 (Android; Opera Mini/7.5.33361/31.1325; U; tr) Presto/2.8.119 Version/11.10

Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329
Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329 Twitter for iPhone

出于安全原因,我想继续检查用户代理。但我也不想拒绝用户进行这样的更改。

PHP 服务器端的正确方法是什么?

(编辑:请注意,我使用盐和一些随机变量加密 cookie 内容。因此很难猜测 cookie 的内容。但是任何窃取 cookie 的人都可以将自己表现为另一种用途。但窃取 cookie 是另一种问题。但是带有会话ID的cookie也可以被窃取,这是另一个问题)

【问题讨论】:

  • 出于安全考虑,我不会使用用户代理,它们很容易被愚弄。
  • 检查用户代理是否从一个请求到下一个请求是有用的,但实际上只在同一个会话中,并且只是反会话劫持故事的一部分。浏览器会以随机间隔自动更新自己,因此通常您不能依赖用户代理字符串在会话之间保持一致。
  • UA 基本没用。
  • 不,我不只检查用户代理。正如我在问题中提到的,我检查了各个方面。我不想把它们写在这里。但用户代理是检查之一。我还用盐加密 cookie。

标签: php security cookies user-agent


【解决方案1】:

我只是要把它扔在这里。用户代理是一种糟糕的安全措施。但是没有很多其他的选择。所以!获取用户代理字符串...

$_SERVER['HTTP_USER_AGENT'];

现在,如果您加密并将其设置为 cookie,并且担心小的更改(只有在浏览器更改或更新时才会发生这种情况)。我建议剥离这些信息并使用操作系统、硬件和浏览器品牌等基本信息。有一些 PHP 库可以帮助促进这些字符串的解析。

如果你真的担心,你也可以用用户的 IP 地址来加盐。您可以通过...获取 IP。

$_SERVER['REMOTE_ADDR'];

但请记住,这两个值都可以很容易地伪造并且不可信。

【讨论】:

    【解决方案2】:

    similart_text() 是一个很好的解决方案。
    参考:http://php.net/manual/en/function.similar-text.php

    例如这两个字符串的相似度是%99

    Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)
        Chrome/29.0.1547.62 Safari/537.36
    Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) 
        Chrome/29.0.1547.66 Safari/537.36
    

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      相关资源
      最近更新 更多