在Firefox或Chrome浏览器中,我想阻止私人网页进行传出连接,即,如果URL在浏览器选项卡中以http://myprivatewebpage/或https://myprivatewebpage/开头,则必须限制该浏览器选项卡,以便允许仅从http://myprivatewebpage/或https://myprivatewebpage/加载图像,CSS,字体,JavaScript,XmlHttpRequest,Java applet,Flash动画和所有其他资源,即<img src="http://www.google.com/images/logos/ps_logo.png">
(或相应的<script>new Image(...)
不能加载该图像) ,因为它不在myprivatewebpage上,所以我需要一个100%安全的解决方案:即使在myprivatewebpage之外,也无法访问单个资源,即使可能性很小,也不能访问除myprivatewebpage之外的其他网页上的资源加载限制,例如必须能够从google.com加载图像。
请注意,我假设myprivatewebpage的用户愿意合作以保持网页的私密性,除非这对他们来说太麻烦了。例如,他们很乐意安装一次Chrome或Firefox扩展,并且如果看到错误消息指出拒绝对myprivatewebpage的访问,除非他们在支持的浏览器中安装了扩展,否则他们不会被冒犯。
我之所以需要此限制,是为了使myprivatewebpage真正保持私有状态,而又不将其使用的任何信息透露给其他网页的网站管理员。如果允许使用http://otherwebpage/,则将对myprivatewebpage的使用记录在Google ps_logo.png
的access.log中,因此Google的网站管理员将获得一些有关如何使用myprivatewebpage的信息,我不希望这样。 (在这个问题上,我对限制是否合理不感兴趣,而仅对技术解决方案及其优缺点感兴趣。)
我的想法如何实施限制:
不要施加任何限制,只需依靠http://www.google.com/images/logos/ps_logo.png。 (这没有提供必要的保护,相同的原始策略允许所有图像通过。)
更改服务器上的Web应用程序,使其生成HTML,JavaScript,Java applet,Flash动画等,这些应用程序永远不会尝试在myprivatewebpage之外加载任何内容。 (在复杂的Web应用程序中的任何地方,尤其是用户生成的内容,都很难做到万无一失。)
使用服务器上的HTML输出过滤器对网页进行过度消毒,即删除所有<script>
,<embed>
和<object>
标记,限制<img src=
,<link rel=
,<form action=
等的目标,以及限制CSS文件中的链接。 (如果我能正确记住所有HTML标记,则可以避免所有不需要的资源,例如,我一定不要忘记<video>
。但这太严格了:它删除了所有动态网页功能,例如JavaScript,Java applet和Flash动画;没有这些大多数Web应用程序都没有用。)
清理网页,即在Web服务器中添加HTML输出过滤器,以从生成的HTML中删除所有有问题的URL。 (这并不是万无一失的,因为可能会有一个棘手的JavaScript生成不允许的URL。它也不能防止Java小程序和Flash动画加载的URL。)
安装一个HTTP代理,该代理基于URL和HTTP引荐来源阻止请求,并通过该HTTP代理强制所有浏览器流量(包括myprivatewebpage,otherwebpage,google.com)。 (这会减慢除myprivatewebpage之外的访问量,并且如果XmlHttpRequest(),Java applet或Flash动画可以伪造HTTP Referer,则可能无法正确保护它。)
查找或编写Firefox或Chrome扩展程序,该程序可拦截所有传出的连接,并根据选项卡的URL和连接的目标URL阻止它们。我在same origin policy和https://developer.mozilla.org/en/Setting_HTTP_request_headers中找到了https://addons.mozilla.org/en-US/firefox/addon/thinkahead/和thinkahead.js
。我是否可以使用它编写Firefox扩展?已经有这样的Firefox扩展了吗?
我为Chrome扩展程序找到了一些链接:
http://thinkahead.mozdev.org/
http://www.chromium.org/developers/design-documents/extensions/notifications-of-web-request-and-navigation
https://groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/90645ce11e1b3d86?pli=1
据我所知,以上列表中只有Firefox或Chrome扩展程序是可行的。你有什么其他的建议?您有一些如何编写或在哪里找到这样的扩展的指针吗?
最佳答案
我在https://developer.mozilla.org/en/Setting_HTTP_request_headers和https://addons.mozilla.org/en-US/firefox/addon/thinkahead/中找到了http://thinkahead.mozdev.org/和thinkahead.js。我是否可以使用它编写Firefox扩展?已经有这样的Firefox扩展了吗?
我是后者扩展的作者,尽管我尚未对其进行更新以支持较新版本的Firefox。我最初的猜测是,是的,它将满足您的要求:
用户无需插件即可访问您的网页。网页包含ThinkAhead块,该块会向服务器发送一个简单的版本头,但是由于未安装插件,因此将忽略该块。
由于服务器看不到该标头,因此它将客户端重定向到页面以安装插件。
用户安装插件。
用户访问带有插件的网页。页面将版本标头发送到服务器,因此服务器允许访问。
ThinkAhead块匹配所有不是myprivatewebpage
的页面,并执行类似将HTTP状态设置为403 Forbidden的操作。从而:
当用户访问myprivatewebpage
中的任何网页时,都是正常的行为。
当用户访问myprivatewebpage
以外的任何网页时,访问将被拒绝。
如果您想更早地捕获不良请求,则可以修改传出标头,而不必修改传入的标头,可能会搞砸“ If-Match”或“ Accept”,以便永不兑现请求。
此解决方案非常轻巧,但可能不足以满足您的需求。这取决于您要保护的内容:鉴于以上所述,客户端将无法看到被阻止的内容,但是外部“被阻止”的主机可能仍会注意到请求已发送,并且可能能够从请求中收集信息。网址。
关于security - Firefox或Chrome插件可阻止和过滤所有传出连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5832664/