检测浏览器用户代理伪造

问题描述 投票:0回答:2

虽然人们应该使用从合法网站下载的经过批准的浏览器来使用它们,这一点很重要,但服务器有什么方法可以检测是否有人欺骗浏览器(用户代理)?

我的问题特别涉及安全性。如果有人创建了一个浏览器(用户代理)并且不遵守某些契约(例如 cookie 的同源策略)来利用其中的漏洞怎么办?该非法浏览器可以通过使用 Firefox 或 Chrome 中使用的标准值填充

User-Agent
标头来声称它是真正的用户代理。

服务器端有没有办法检测用户是否使用欺骗性的用户代理,以便服务器可以在需要时采取对策?或者这是使用浏览器的个人的绝对责任,仅使用经批准的浏览器(服务器无法检测到它)?

http security https http-headers
2个回答
2
投票

浏览器只是 HTTP 的高级用户界面。在引入各种安全方法之前,没有太多措施来防止此类攻击。如今的浏览器(Chrome、Firefox、Edge)有限制并遵守某些规则/合同(为了正常工作)。

人们可以使用 HTTP 客户端欺骗(发送)任何东西(一种非常精简的 “浏览器”),例如 CURL。

curl -A "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0" http://blah.nonexistent.tld

(默认的curl标头类似于User-Agent:curl/7.16.3)

服务器可以限制或检测不常见的用户代理以防止抓取或扫描,但用户代理只不过是一个“名称”,可以像上面那样更改为常见的用户代理。

已添加的安全方法(合约),例如同源资源策略 / 跨源资源共享 / HTTP Only 可以保护客户端(浏览器)和服务器。它们必须由两者共同实现才能正常(安全)地运行以防止上述攻击。如果客户端和服务器没有正确使用商定的合同,那么cookie可能会被泄露(现代浏览器被设计为快速失败,但仍然可以防止这种情况发生)。

如果您的意思是要创建自己的浏览器,将其用户代理设置为 Chrome,请忽略正确配置的服务器所签订的合同,那么他们可能会忽略您。您会从很少有人使用的“自定义”浏览器中窃取哪些用户 cookie?


0
投票

浏览器运行不同的 JS 引擎并做出不同的响应,因此任何稍微复杂的反用户代理伪造检测都可以工作。

一些例子:

Chrome:

Math.hypot(-24.42, -50.519999999999925) -> 56.1124478168614
window.webkitCancelAnimationFrame !== undefined -> true
window.mozInnerScreenX !== undefined -> false
window.PERSISTENT !== undefined -> true
window.chrome !== undefined -> true
window.InstallTrigger !== undefined -> false


Firefox:

Math.hypot(-24.42, -50.519999999999925) -> 56.11244781686139
window.webkitCancelAnimationFrame !== undefined -> false
window.mozInnerScreenX !== undefined -> true
window.PERSISTENT !== undefined -> false
window.chrome !== undefined -> false
window.InstallTrigger !== undefined -> true

另请参阅:https://github.com/fingerprintjs/fingerprintjs

© www.soinside.com 2019 - 2024. All rights reserved.