3

在 Firefox 或 Chrome 中,我想阻止私人网页进行传出连接,即如果 URL 在浏览器选项卡中以http://myprivatewebpage/https://myprivatewebpage/ 开头,则必须限制该浏览器选项卡以便只允许从http://myprivatewebpage/https://myprivatewebpage/加载图像、CSS、字体、JavaScript、XmlHttpRequest、Java 小程序、flash 动画和所有其他资源,即<img src="http://www.google.com/images/logos/ps_logo.png">(或相应的<script>new Image(...)不得能够加载该图像,因为它不在myprivatewebpage上。我需要一个 100% 且万无一失的解决方案:甚至没有myprivatewebpage之外的单个资源可以访问,即使概率很低。除了myprivatewebpage之外的网页必须没有资源加载限制,例如http://otherwebpage/必须能够从google.com加载图像。

请注意,我假设myprivatewebpage的用户愿意合作以保持网页的私密性,除非这对他们来说工作量太大。例如,他们会很乐意安装一次 Chrome 或 Firefox 扩展程序,并且如果他们看到一条错误消息指出拒绝访问myprivatewebpage直到他们在支持的浏览器中安装扩展程序,他们也不会感到被冒犯。

我需要这个限制的原因是为了保持myprivatewebpage真正的私密性,而不会将有关其使用的任何信息暴露给其他网页的网站管理员。如果http://www.google.com/images/logos/ps_logo.png被允许,那么myprivatewebpage的使用会被记录在 Google 的 access.log 中ps_logo.png,这样 Google 的站长就会知道myprivatewebpage是如何被使用的,并且我不想要那个。(在这个问题中,我对限制是否合理不感兴趣,但我只对技术解决方案及其优缺点感兴趣。)

我的想法如何实施限制:

  • 不要强加任何限制,只依赖同源策略。(这并没有提供必要的保护,同源策略允许所有图像通过。)

  • 更改服务器上的 Web 应用程序,使其生成 HTML、JavaScript、Java 小程序、flash 动画等,这些程序永远不会尝试加载myprivatewebpage之外的任何内容。(在复杂的 Web 应用程序中,这几乎不可能在任何地方都做到万无一失,尤其是对于用户生成的内容。)

  • 使用服务器上的 HTML 输出过滤器对网页进行过度清理,即删除所有<script>,<embed><object>标签,限制,等的目标<img src=,并限制 CSS 文件中的链接。(如果我能正确记住所有 HTML 标记,这可以防止所有不需要的资源,例如我不能忘记. 但这太严格了:它删除了所有动态网页功能,如 JavaScript、Java 小程序和 Flash 动画;没有这些大多数网络应用程序是无用的。)<link rel=<form action=<video>

  • 清理网页,即在网络服务器中添加一个 HTML 输出过滤器,从生成的 HTML 中删除所有有问题的 URL。(这不是万无一失的,因为可能有一个棘手的 JavaScript 会生成一个不允许的 URL。它也不能防止 Java 小程序和 Flash 动画加载的 URL。)

  • 安装一个 HTTP 代理来阻止基于 URL 和 HTTP Referer 的请求,并强制所有浏览器流量(包括myprivatewebpageotherwebpagegoogle.com)通过该 HTTP 代理。(这会减慢到myprivatewebpage以外的流量,并且如果 XmlHttpRequest()、Java 小程序或 Flash 动画可以伪造 HTTP 引用器,它可能无法正确保护。)

  • 查找或编写拦截所有传出连接的 Firefox 或 Chrome 扩展程序,并根据选项卡的 URL 和连接的目标 URL 阻止它们。我找到了https://developer.mozilla.org/en/Setting_HTTP_request_headershttps://addons.mozilla.org/en-US/firefox/addon/thinkahead/http://thinkahead.mozdev.org/ . 我是否正确可以使用它编写 Firefox 扩展?已经有这样的 Firefox 扩展了吗?thinkahead.js

我为 Chrome 扩展找到的一些链接:

据我所知,上面列表中只有 Firefox 或 Chrome 扩展是可行的。你有什么其他的建议?您是否有一些指示如何编写或在哪里可以找到这样的扩展?

4

1 回答 1

1

我在https://addons.mozilla.org/en-US/firefox/addon/thinkahead/http://thinkahead.mozdev中找到了https://developer.mozilla.org/en/Setting_HTTP_request_headers和 thinkahead.js .org/。我是否正确可以使用它编写 Firefox 扩展?已经有这样的 Firefox 扩展了吗?

我是后一个扩展的作者,虽然我还没有更新它以支持更新版本的 Firefox。我最初的猜测是,是的,它会做你想做的事:

  1. 用户在没有插件的情况下访问您的网页。网页包含 ThinkAhead 块,该块将向服务器发送一个简单的版本标头,但由于未安装插件,这将被忽略。
  2. 由于服务器看不到该标头,因此它将客户端重定向到一个页面以安装插件。
  3. 用户安装插件。
  4. 用户使用插件访问网页。页面将版本标头发送到服务器,因此服务器允许访问。
  5. ThinkAhead 块匹配所有不是 myprivatewebpage的页面,并执行诸如将 HTTP 状态设置为 403 Forbidden 之类的操作。因此:
  6. 当用户访问 中的任何网页时,都会myprivatewebpage出现正常行为。
  7. 当用户访问 之外的任何网页时myprivatewebpage,访问将被拒绝。

如果您想更早地捕获错误请求,而不是修改传入的标头,您可以修改传出的标头,可能会搞砸“If-Match”或“Accept”,这样请求就永远不会被兑现。

此解决方案非常轻量级,但可能不足以解决您的问题。这取决于您要保护的内容:鉴于上述情况,客户端将无法看到被阻止的内容,但外部“被阻止”主机可能仍会注意到请求已发送,并且可能能够从请求中收集信息网址。

于 2012-01-26T16:39:56.143 回答