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

Javascript 如何保证指纹值在客户端的请求中不被伪造,javascript,fingerprint,fingerprintjs2,Javascript,Fingerprint,Fingerprintjs2,JS指纹是在客户端使用类似的库计算的 我的问题是,如果我通过ajax发送这个值,用户只需稍加努力就可以伪造这个值,然后发出一个伪造的post请求,该请求将由服务器代码(如legit)解释 我的问题是,如果发生这种情况,可以轻松绕过此库,而无需更改浏览器中的任何属性(这将更改浏览器指纹) 我的解释是对的?如何确保该值的完整性?您不能,我也不会为此担心 规则1:所有来自用户计算机的输入都是伪造的,不能100%依赖 如果您愿意,您可以将服务器端指纹与库加倍,以匹配数据,但这无缘无故让您头疼 90%访问

JS指纹是在客户端使用类似的库计算的

我的问题是,如果我通过ajax发送这个值,用户只需稍加努力就可以伪造这个值,然后发出一个伪造的post请求,该请求将由服务器代码(如legit)解释

我的问题是,如果发生这种情况,可以轻松绕过此库,而无需更改浏览器中的任何属性(这将更改浏览器指纹)


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

您不能,我也不会为此担心

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

如果您愿意,您可以将服务器端指纹与库加倍,以匹配数据,但这无缘无故让您头疼

90%访问您的用户不会知道您在做什么,也不会向您提供可靠的数据。他们甚至连广告块都没有。他们会给你可靠的数据

9%的访问者可能有adblocker,它可能会也可能不会阻止这些ajax请求。他们希望你尊重他们的隐私,这样你就可以让他们成为你的客户。1%的用户可能知道这些ajax请求会做什么,但他们永远也不会知道,因为他们不会费心去检查他们访问的每个网站的控制台。其中1%的用户可能会浏览一下浏览器控制台,找出浏览器的指纹

这1%中的1%会偷走你的指纹代码。另外1%的1%的1%的人会试图假装只是为了放松一下,然后忘掉它

总之,不用麻烦了。人们也不会打扰

但如果你真的要麻烦,让自己头疼的话:

  • 以跟踪cookie的形式将用户标识存储在客户端计算机上的数据库中。还将其存储在会话存储、本地存储和浏览器可能提供的任何数据库引擎中。(请注意,当欧洲用户访问您的网站时,您需要在您的cookie使用免责声明中说明为什么要在用户计算机上存储数据)
  • 使用该用户ID将指纹与用户匹配。请注意,任何缓存清除机制(cccleaner、病毒扫描程序、用户单击空历史记录等)都可能随时删除此id
  • 将用户id放入window.name对象中。只要选项卡处于打开状态,它就会被持久化,并尝试在用户计算机上重置/保存它
  • 在图像中添加一个电子标签,用户下次来时,计算机将尝试请求该图像带有该etag编号。拦截该请求(不要让Web服务器处理它,而是用php/jsp/asp/whatever处理它),这样您就可以识别用户。使用正确的用户id设置会话变量,并“响应”图像在该etag值下仍然有效,然后使用正确的用户id返回cookies
  • 将“timestamp”值放在基于用户id的javascript请求后面,并将包含该javascript文件的请求页面设置为在180天左右过期。每次用户返回并且用户没有清除历史记录时,它都会使用给定的“timestamp”get参数发出javascript请求
    gotcha.js?time=12837273873
    再次使用服务器端脚本进行拦截。然后可以使用ajax更新页面内容
  • 在你的页面上包括谷歌地图之类的东西。如果他们使用gmail或任何谷歌服务,并同意谷歌设置cookies,谷歌会将浏览器中的cookies全部转储,这可能会持续一段时间。谷歌地图cookie至少在浏览器会话中保持不变,并且可以通过javascript/服务器端脚本读取
  • 使用piwik device detector构建服务器端浏览器指纹,使用它缩小对它是哪个用户的猜测
  • 将您的请求编码为bytebuffer/流,并对其进行base64编码以猜测其难度,即使base64将其解码并将请求分为两部分发送,一部分带有验证哈希,另一部分带有指纹。然后匹配散列和内容,如果匹配,你可以确定如果它被欺骗了,有人付出了很多努力
  • 缩小并模糊代码,同时在javascript代码中添加许多无用的副街。把每一行放在它自己的功能中,把它们连在一起,形成一个有凝聚力的东西。太过努力地去推断那里发生了什么
除此之外,我真的可以向你推荐:不用麻烦了。这不值得努力。想规避的人会规避。他们将禁用javascript,排除该脚本,在继续或离开网站之前删除所有cookie,更改注册字体插件,等等。。。 不要追逐那些不想被追逐的人。关注那些不在乎的人

如何确保该值的完整性

为了非常简单地回答您的问题,每当您想要保护您的完整性时,您也必须提供发送消息的摘要

在这里,我用Alice(前端)、Bob(后端)和Trudy(恶意用户)来解释完整性防御

假设:

Alice想将一个包含
纯文本
(这里是你的指纹)的包发送给Bob,而Trudy是恶意的人,他希望截获包并更改
纯文本


对诚信的威胁:

Trudy可以捕获
纯文本
,并将其更改为她想要的任何内容。(事实上,可能会有更多对诚信的威胁,但我希望故事简短。)


以下是Alice为保护软件包完整性必须采取的步骤:

  • Alice获取
    纯文本的摘要(称为
    文本摘要
  • Alice将摘要附加到
    纯文本
    ,并获得一个新的
    包<