security - Firefox或Chrome插件可阻止和过滤所有传出连接

标签 security sanitization same-origin-policy restriction

在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 policyhttps://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_headershttps://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/

相关文章:

javascript - 使应用程序可以通过两个域访问同源 AJAX 请求

javascript - 如何防止 iframe 访问父框架?

javascript - 在客户端 JavaScript 中使用我的 Flickr API key 安全吗?

java - 如何防止用户修改其他用户的数据?

mysql - 在将数据插入表之前,是否在 MySQL 端进行模式匹配?

javascript - 如何为数组中的每个元素绕过 SecurityTrustResourceUrl?

plsql - 清理作为动态 PL/SQL 命令一部分的用户输入

php - PHP 中的序列化数组,防止注入(inject)

security - 如果 MD5 损坏,有什么更好的解决方案?

javascript - 为什么我的 JavaScript 代码收到“"No ' Access-Control-Allow-Origin' header is present on the requested resources”错误,而 Postman 却没有?