谷歌和许多其他网站都知道我的正确位置。如何在不使用 VPN、代理、Tor 或类似工具的情况下伪造我的位置?
我去about:config
寻找地理。我认为我必须修改的是geo.wifi.uri
?也许我们可以直接输入错误的纬度和经度值?如果是这样,那它会是什么样子?我真的不知道格式。
还是有另一种在 Greasemonkey 中使用 JavaScript 的方法?
谷歌和许多其他网站都知道我的正确位置。如何在不使用 VPN、代理、Tor 或类似工具的情况下伪造我的位置?
我去about:config
寻找地理。我认为我必须修改的是geo.wifi.uri
?也许我们可以直接输入错误的纬度和经度值?如果是这样,那它会是什么样子?我真的不知道格式。
还是有另一种在 Greasemonkey 中使用 JavaScript 的方法?
您可以通过以下方式欺骗通过HTML5 Geolocation API提供的位置:
去about:config
。
输入geo.provider.network.url
(或geo.wifi.uri
旧版本)
将值更改为如下所示:
data:application/json,{"location": {"lat": 40.7590, "lng": -73.9845}, "accuracy": 27000.0}
(lat
和lng
值确定您所在位置的纬度和经度。
确认geo.enabled
是true
.
您可能还需要设置geo.provider.testing
为true
. (如果密钥不存在,则创建密钥。)
恭喜,您现在在时代广场!(在这里验证结果。)
注意:这不会阻止网站从您的 IP 地址获取位置。您不能在应用程序层上执行此操作,而必须使用代理。
出于隐私原因,您可能希望完全阻止使用 API:
about:config
并设置geo.enabled
为false
。Firefox 中的地理定位服务是在dom/geolocation/Geolocation.cpp
. 在nsGeolocationService::Init()
您看到没有geo.enabled
的情况下,API 初始化会立即中止:
if (!StaticPrefs::geo_enabled()) {
return NS_ERROR_FAILURE;
}
此外,浏览器会根据您的平台和设置在不同的位置提供商之间进行选择。如您所见,有一些偏好可以单独切换它们(例如,如果您使用的是 MacOS,则可以设置geo.provider.use_corelocation
为false
通过 Apple 的Core Location API禁用地理定位):
#ifdef MOZ_WIDGET_ANDROID
mProvider = new AndroidLocationProvider();
#endif
#ifdef MOZ_WIDGET_GTK
# ifdef MOZ_GPSD
if (Preferences::GetBool("geo.provider.use_gpsd", false)) {
mProvider = new GpsdLocationProvider();
}
# endif
#endif
#ifdef MOZ_WIDGET_COCOA
if (Preferences::GetBool("geo.provider.use_corelocation", true)) {
mProvider = new CoreLocationLocationProvider();
}
#endif
#ifdef XP_WIN
if (Preferences::GetBool("geo.provider.ms-windows-location", false) &&
IsWin8OrLater()) {
mProvider = new WindowsLocationProvider();
}
#endif
if (Preferences::GetBool("geo.provider.use_mls", false)) {
mProvider = do_CreateInstance("@mozilla.org/geolocation/mls-provider;1");
}
仅当没有特定于平台的提供程序适用时,或者如果geo.provider.testing
is true
,Firefox 默认使用网络(基于 URL)提供程序:
if (!mProvider || Preferences::GetBool("geo.provider.testing", false)) {
nsCOMPtr<nsIGeolocationProvider> geoTestProvider =
do_GetService(NS_GEOLOCATION_PROVIDER_CONTRACTID);
if (geoTestProvider) {
mProvider = geoTestProvider;
}
}
网络提供商 ( dom/system/NetworkGeolocationProvider.jsm
) 然后请求 中指定的 URL geo.provider.network.url
。您可以设置自己的模拟 HTTP 位置服务并在此处输入其 URL。但更容易的是,就像在顶部的步骤中一样,使用data:
伪 URI 来模拟无条件响应您所需位置详细信息的网络提供商就足够了。
只要您的流量直接流向他们(也就是说,不是通过某种代理),他们就会拥有您的 IP,从而获得粗略的地理位置。
我如何在没有 vpn / proxy / tor 等的情况下伪造我的位置?
为什么你有这个限制?