我做以下
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吗?
谢谢
答案 0 :(得分:8)
只有cookie才能做到这一点。
Cookie存储在每个浏览器(有时甚至是每个模式或每个会话),无论如何,可以是用户随心所欲地清除。
现在,evercookie试图通过以多种多种方式存储数据来实现这一目标,希望并非所有这些都被同时清除。 然而,这些方法通常仅限于给定的浏览器/配置文件 ,并取决于可以使用哪些其他机制。 ( EC也可以通过禁用JavaScript,使用调试工具调整[cookie或正在运行]值,或使用非浏览器启动请求来绕过。)
无论如何,当使用EC方法时(取决于人口统计数据可能取得的成功有限,但远离“hackproof”),只需设置一个[大]“随机值”,如果没有设置任何值,并始终将该值发送到服务器。 (确实没有必要从服务器获取一个nonce,因为服务器无法验证原始请求是不是“重复”,这是一个catch-22。)
快乐的编码。
答案 1 :(得分:2)
你真的不应该使用那个库。它会在您的访问者浏览器中放入大量垃圾,非常不稳定(页面崩溃对我来说)。我认为存在陈述案例而不是在生产环境中使用。
此外,它可以通过不使用浏览器轻松解决,而是使用脚本(wget等)。攻击者可以在短时间内对投票进行投票。
您应该通过数据库中的IP地址保存投票,并且每天只允许投票一次。这是安全性和可用性之间最常见的权衡。
答案 2 :(得分:0)
根据您对尝试完成的内容的描述,Cookie将是一个非常非常糟糕的选择。即使是evercookie也不会与浏览器无关。而且,一旦用户清除了他们的饼干,evercookie就没用了。
存储IP地址服务器端是最接近您正在寻找的东西。但即使这样也充满了挑战。许多公司IT部门都会进行设置,以便来自其网络的所有请求都具有相同的外部IP。在这种情况下,即使有成千上万的员工,每个员工都有自己的计算机,一旦该网络上的一个人提交投票,同一网络上的任何其他用户都将被阻止这样做。同样适用于任何有ISP的家庭。
最重要的是,您所寻找的只是违背互联网的核心架构。