我浏览并注册账户的某些网站可以通过 Windows 上设置的“时区”找到我的位置,我使用 Chrome,那么我该如何阻止他们访问实际时区?
编辑:抱歉,忘了说我使用的是英国 IP 的 VPN,所以直到最近我一直像英国人一样上网,直到最近我发现有些网站可以通过您的时区知道您的实际位置。
你可以自己测试一下: 去 ifttt.com 使用一些 VPN/代理注册一个账户,然后进入你的账户,你会发现他们不是通过 IP 来设置你的位置,而是通过你的时区来设置你的位置!
我遇到的实际问题是某些网站限制某些地区的服务,因此尽管你拥有具有正确 IP 的 VPN,但他们会根据你的时区拒绝提供服务。
然后你花了好几天的时间想知道他们是如何做到的:(,经过几天的测试,最终使用“safescript extension”我意识到他们是根据你的时区来做到这一点的!
答案1
通过浏览器上的 JavaScript 获取系统时区(在操作系统中设置)非常简单。在 location/url 中输入以下内容:
javascript:alert(new Date())
javascript:alert(new Date().getTimezoneOffset())
第一个显示您所在时区的当前时间,通常带有时区偏移量和名称,如“GMT-400 (EDT)”。如果解析和计算工作量太大,第二个显示晚于 UTC 的分钟数。因此,如果启用了 JavaScript,网站可以获取此值并将其填充到表单中提交的字段中,或者只是随时将此信息发送回服务器。
因此,除了使用代理来阻止 IP 地理定位之外,您还需要禁用 JavaScript,这可能会在一定程度上破坏网站。
(目前正在使用 40 个时区,而不是 24 小时——有些时间从 UTC 整点后的 30 分钟和 45 分钟开始,太平洋地区的一些时间重叠了一天。)
编辑:除了时区之外,您还可以通过 Date 和 Number 对象获取您的语言环境:年、月、日的顺序和分隔符;以及千位和小数分隔符。在某些情况下,这些组合可能会提供精确到国家/地区的位置(甚至更好 - 看看所有组合的矩阵会很有趣)。
即使你可以简单地删除 Date 和 Number,也可能会破坏一些有用的功能。因此,最好的方法是修改对象原型以便他们撒谎并使用任意选择的时区和语言环境。但这需要在 Date 上做大量工作;有几种相关方法。例如,要强制使用 GMT:
Date.prototype.toString = Date.prototype.toGMTString;
Date.prototype.getTimezoneOffset = function() {return 0;};
// and about 10 more
正如@barlop 所建议的那样,看起来你可以使用Privoxy 过滤器在页面到达浏览器之前对其进行修改。由于 (1) Privoxy 的搜索和替换工作方式、(2) 补丁的要求以及 (3) HTML 的灵活性:您必须在和的开头应用补丁<head>
(<body>
即使这样也不能 100% 覆盖)。
答案2
我非常怀疑(他们是否通过 Windows 做到这一点)。也许他们知道您 IP 所在地的时区。或者有些论坛会询问您的时区,而您告诉了他们。尝试更改 Windows 中的时间,看看他们是否能识别 - 他们不会识别。如果您将多台计算机设置为不同的时区,他们也不会知道。您可以隐藏您的 IP(这样他们只能看到另一个 IP),但这样会很慢或会花费您的费用。