我尝试开发Firefox扩展程序,以防止用户跟踪时使用的浏览器指纹识别来保护用户安全。
许多(如果不是全部)指纹识别技术包括记录navigator.plugins
,navigator.oscpu
,navigator.platform
,屏幕分辨率,窗口工具栏高度等内容。扩展的概念由两部分组成 - 第一部分是随机过滤和置换插件及其哑剧类型,并诱导其他用于跟踪的变量的随机性;第二是隔离网页,以防止它重复使用以前隐藏的信息 - 例如.sol
- 使用假的E-Tag
或未发现的任何内容。
这两种方法都需要在特权navigator
,screen
,location
对象的不可配置属性上重新实现getter,这就是我被卡住的地方。
例如,在浏览器控制台中输入简单明了的代码后就不起作用了:
Object.defineProperty(getBrowser().contentWindow.location, 'href', {
get: function() {
return 'foobar';
}
});
它不会产生任何错误,但也不会重新定义属性。此外,由于某种原因,它会返回location
对象的当前值 - 这是我对Object.defineProperty
所期望的。
用location
替换location.wrappedJSObject
会使浏览器吐出TypeError: can't redefine non-configurable property 'href'
,与非特权代码将抛出的内容相同。
我试图追踪你在某事上致电Object.defineProperty
时会发生什么。它似乎从js::obj_defineProperty()
开始,然后转到js::StandardDefineProperty
,后者又进行了几次检查,然后下降到js::DefinePropertyOnObject
,这有大量的检查我不会完全理解,最后以js::NativeDefineProperty
结束,完成实际的对象修改。
所以,问题是:
location
,navigator
,screen
个对象,将其替换为由我的扩展程序控制的一些模拟代理?js::NativeDefineProperty
?js::NativeDefineProperty
公开给chrome作为服务?更新:我在Mozilla IRC上遇到过一个问题,如何进行位置重写与隐私相关。目前,私密浏览模式下的所有窗口共享相同的cookie,存储等,因此即使您不经常重置也可以在私人模式下进行跟踪。常常是一个问题 - 理想情况下,您应该在每个访问过的网站后重置,因为每个网站都可以标记您。如果有能力调整私人模式的粒度,那就太酷了,比如,将独立的私人窗口或标签彼此分开。
我考虑过使用某种标签唯一的长随机标记标记所有网址 - 因此http://example.com/foo
在两个单独的私有标签中打开,变为http://example.com.AYZYXP/foo
和http://example.com.QUSOFX/foo
。从浏览器的角度来看,这些是两个不同的域名,具有自己的缓存规则,cookie,DOM存储,IndexedDB,FlashPlayer pesistence或其他任何东西。从网页的角度来看,保持对两个标签的展示都是http://example.com/foo
是必要的,因为公开标记会违背标记的想法 - 这就是我需要进行位置重写的原因
答案 0 :(得分:0)
可能有一种方法可以进行一次更改,浏览器会将其发送到所有内容,而window.navigator.blah
的javascript代码将返回被覆盖的值。如果我找到类似的东西,我会睁大眼睛。
以下是XPCOM参考:https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface
我相信如果你探索所有那些你会找到覆盖东西的东西。
我不确定您是否设置了请求或响应标头,如果window.navigator.blah
的javascript将返回但值得拍摄的内容,则无论如何都要复制粘贴代码。看看吧。
你所做的是为http-on-modify-request
建立一个观察者(或者其他人可以在这里看到其他观察者:MDN :: Observer Notifications - HTTP Requests)
然后在观察者的处理程序中,使用setRequestHeader
等进行修改,如果您为setResponseHeader
做观察者,甚至可以http-on-examine-response
。
请参阅此主题,此处的示例代码仅欺骗第一个标签的用户代理:How can I change the User Agent in just one tab of Firefox?