当用户登录我的网站时,我将加密的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服务器端的正确方法是什么?
(编辑:请注意,我使用salt和一些随机变量加密cookie内容。所以很难猜出cookie的内容。但是任何窃取cookie的人都可以将自己视为另一种用途。但cookie偷取是另一种用途。问题。但会话ID的cookie也可能被盗,这是另一个问题)
答案 0 :(得分:0)
我只是想把它扔出去。用户代理是一种糟糕的安全措施。但是没有其他很多选择。所以!获取用户代理字符串...
$_SERVER['HTTP_USER_AGENT'];
现在,如果您加密并将其设置为cookie,并担心小的更改(这应该只在浏览器更改或更新时发生)。我建议使用OS,硬件和浏览器品牌等基本信息来删除此信息。有PHP库可以帮助解析这些字符串。
如果您真的担心,也可以使用用户的IP地址加盐。您可以使用...
获取IP$ _ SERVER [ 'REMOTE_ADDR'];
但请记住,这两个值都可以轻易伪造,不值得信任。
答案 1 :(得分:0)
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