【发布时间】:2022-01-23 03:14:59
【问题描述】:
可以使用如下脚本覆盖 document.cookie 设置器和获取器:
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
var cookieDescriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie') || Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie');
if (cookieDescriptor && cookieDescriptor.configurable) {
Object.defineProperty(document, 'cookie', {
get: function() {
return cookieDescriptor.get.apply(document);
},
set: function(value) {
//do your own stuff before setting the cookie
cookieDescriptor.set.apply(document, value);
}
});
}
}
使用这个cookie代理,我们需要过滤cookie并允许设置好的cookie。通过谷歌标签管理器注入的一些营销脚本几乎是无法控制的,我们不想删除这些脚本,而是想阻止/阻止它们设置为创建的未知/不需要的 cookie。这个脚本允许我们这样做;但是,通过 HTTP 响应设置的 cookie 不属于欢迎列表,也应该被删除,这就是问题所在。
使用上述脚本后,我们无法再删除过期的cookie。
所以,这种 cookie 删除技术不再起作用了:
document.cookie = "cookieTest=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
是否有任何解决方法可以在覆盖本机函数时使 cookie 删除工作?
【问题讨论】:
-
也许您可以使用
setInterval()运行一个定期删除不需要的 cookie 的函数。 -
我认为 HTTP 响应的内置 cookie 处理没有任何挂钩。
-
而且我认为这些都无法检测到 HttpOnly cookie。
-
我也没有,但是一旦设置了 Http cookie,就可以通过 document.cookie 访问 cookie,并且可以将其删除,但是,由于我提到的“黑客”事情,我们不能.这些并不是真正可以预防的,但至少在删除有效的情况下是“可删除的”。
-
您的代码可以检查正在设置的过期时间。如果是过去,那就是 cookie 删除,所以应该允许。
标签: javascript html cookies