如何保证指纹值不会在客户端的请求中伪造

anv*_*nvd 12 javascript fingerprint fingerprintjs2

使用像fingerprint2这样的库在客户端计算JS 指纹.

我的问题是,如果我通过ajax发送这个值,用户可以轻微地伪造这个值,并且只做一个假的帖子请求,它将被服务器代码解释为合法的.

我的问题是,如果发生这种情况,可以轻松绕过这个库,甚至不用更改浏览器中的任何属性(这将改变浏览器指纹).

我的解释是对的?我如何确保该价值的完整性?

Tsc*_*cka 14

你不能,我不会真的担心它.

规则1:来自用户计算机的所有输入都可以伪造,不能100%依赖.

如果你想要的话,你可以使用服务器端指纹识别和图书馆作为piwik设备检测器来匹配数据,但是你会让自己头疼无故.

90%的用户访问您,不知道您在做什么,并为您提供可靠的数据.他们甚至不会有广告块.他们会为您提供可靠的数据.

9%的访问者可能拥有广告拦截器,这可能会也可能不会阻止这些ajax请求.他们希望您尊重他们的隐私,这样做可以让他们成为客户.1%的人可能知道这些ajax请求的作用,但他们永远都不会发现,因为他们无法检查他们访问的每个网站的控制台.1%的1%可能会浏览浏览器控制台并找出浏览器指纹打印.

1%的1%中的1%将窃取您的指纹识别码.1%的1%中的另外1%将尝试为lulz伪造它然后忘记它.

所以总之,不要打扰.人们也不会打扰.

但是,如果你真的必须打扰,并让自己头疼:

  • 以跟踪cookie的形式将用户标识存储在客户端计算机上的数据库中.还将其存储在会话存储,本地存储以及浏览器可能提供的任何数据库引擎中.(请注意,您需要将其放入Cookie使用免责声明,以便在欧洲用户访问您的网站时将数据存储在用户计算机上)
  • 使用该用户标识将指纹与用户匹配.请注意,任何缓存清除机制(cccleaner,病毒扫描程序,用户单击空历史记录等)都可以随时删除此ID.
  • 将用户标识放在window.name对象中.只要选项卡处于打开状态,使用它就会被保留,并尝试将其重置/保存在用户计算机上.
  • 在您的图像中添加E-TAG,用户计算机将在下次访问时尝试使用该etag编号请求该图像.拦截该请求(不要让网络服务器处理它,而是在php/jsp/asp /中处理它),这样你就可以识别用户.使用正确的用户标识设置会话变量并"响应"该图像在该标签值下仍然有效,并使用cookie返回正确的用户标识
  • 将"timestamp"值置于基于用户ID的javascript请求后面,并将包含该javascript文件的请求页面设置为180天左右到期.每次用户返回并且用户尚未清除其历史记录时,它将使用给定"timestamp"获取参数的javascript请求gotcha.js?time=1283737273873 再次使用服务器端脚本来拦截.然后,您可以使用ajax更新页面的内容.
  • 在您的网页上添加谷歌地图等内容.如果他们使用Gmail或任何谷歌服务,他们同意谷歌设置cookie谷歌将转储他们的浏览器充满cookie,这可能会持续一段时间.谷歌地图cookie至少在浏览器会话中保持不变,并且可通过javascript/serverside脚本读取.
  • 使用piwik设备检测器构建服务器端浏览器指纹,使用它来缩小关于哪个用户的猜测.
  • 将您的请求编码为bytebuffer/stream,并对其进行编码,以便猜测它的难度,即使它们对它进行base64解码并将请求分为两部分,一部分带有验证哈希,另一部分带有指纹.然后匹配哈希和内容,如果它匹配,你可以肯定,如果它被欺骗,有人经过了很多努力.
  • 缩小和混淆您的代码,也在您的javascript代码中的许多无用的sidestreets.将每一行放在自己的功能中并将它们链接在一起以形成一个有凝聚力的东西.努力去除那里发生的事情.

除此之外,我真的可以推荐你:不要打扰.这不值得努力.想要规避的人会规避.他们将禁用javascript,排除该脚本,在继续或离开网站之前清除所有cookie,更改已注册的字体插件等...不要追逐那些不希望被追逐的人.专注于不关心的群体.