如何创建独立于浏览器的 Cookie

How to create browser independent cookies?

本文关键字:浏览器 Cookie 独立 何创建 创建      更新时间:2023-09-26
  • 我正在尝试建立一个投票系统,用户无需在网站上注册即可投票
  • cookie 依赖于浏览器,因此如果人们使用不同的浏览器,他们可以多次投票(我想阻止他们这样做((我不想要任何偏见(
  • 读evercookie是我可以使用的东西。我看到的问题是调用似乎是异步的。例如

我做以下事情

 var ec = new evercookie
 ec.get("id", function(value) { 
        alert("Cookie value is " + value);
        if (value != null) {
           alert('cookie already set, returning');
           return;
        }
        ec.set("id", "12345");
        alert('cookie saved');
 });

当我使用此代码时,它首先设置 cookie,刷新页面,然后返回值,因此我按以下顺序查看

cookie saved
cookie already set, returning

有人可以帮我设置独立于浏览器的 cookie 吗?

谢谢

你不能

只用饼干来做到这一点。

Cookie 按浏览器存储(有时甚至按模式按会话存储(,在任何情况下,用户都可以随心所欲地清除

现在,evercookie试图通过以许多不同的方式存储数据来解决这个问题,希望不是所有数据都被[同时]清除。但是,这些员工的方法通常仍然局限于给定的浏览器/配置文件,并且取决于可以使用哪些其他机制。(EC 也可以通过禁用 JavaScript、使用调试工具调整 [cookie 或动态] 值或使用非浏览器发起请求来绕过

无论如何,当使用EC方法时(它可能有有限的成功,取决于人口统计,但它远非"防黑客"(,如果没有设置任何值,只需设置一个[大]"随机值",并始终将该值发送到服务器。(确实没有必要要求服务器提供随机数,因为服务器无法验证原始请求不是"重复的",这有点像 catch-22。

快乐编码。

你真的不应该使用该库。它会在您的访问者浏览器中放置大量垃圾,非常不稳定(页面对我来说崩溃(。我认为它的存在是为了陈述一个案例,而不是在生产环境中使用。

此外,只需不使用浏览器,而是使用脚本(wget 等(即可轻松解决。攻击者可以在这样的短时间内投票数百次。

您应该将 IP 地址的投票保存在数据库中,并且每天只允许 1 次左右的投票。这是安全性和可用性之间最常见的权衡。

根据您对要完成的任务的描述,cookie将是一个非常非常糟糕的选择。甚至evercookie也不会独立于浏览器。而且,一旦用户清除了他们的cookie,evercookie就毫无用处了。

存储 IP 地址服务器端是最接近获取所需内容的方法。但即便如此,也充满了挑战。许多企业 IT 部门会进行设置,以便来自其网络的所有请求都具有相同的外向 IP。在这种情况下,即使有数千名员工,每个人都有自己的计算机,一旦该网络上的一个人提交投票,同一网络上的任何其他用户都将被阻止这样做。这同样适用于任何拥有ISP的家庭。

最重要的是,您正在寻找的内容与互联网的核心架构背道而驰。