防止浏览器扩展注入Javascript代码(Protect against browser exte

2019-07-31 16:51发布

浏览器允许扩展注入代码,操作DOM等。

多年来,我注意到很多和网站(应用程序)我看,通过在Firefox,Chrome和Internet Explorer(所有版本)未知的浏览器扩展产生的各种未被捕获的错误(使用window.onerror)。

这些错误似乎并没有被打断任何东西。 现在,我想提高这个网站的安全性,因为它会开始处理信用卡。 我看到我自己的眼睛恶意软件/间谍软件感染的浏览器与修改的浏览器扩展(无辜的浏览器扩展,修改,以对攻击/脚本小子报告)的键盘记录器的工作(使用琐碎安其*事件处理程序,或者只是input.value检查)。

有没有一种方法(meta标签等)告知浏览器不允许代码注入或读取DOM,标准或非标准? 该网页已经是SSL,然而这似乎并不重要(如给一个提示浏览器以激活扩展更严格的安全)。

由他人或关闭我的头顶提出可能的解决方法 (一种舒展与一个简单的meta标签的):

  • 虚拟键盘用于输入数字+非文本输入(又名张图片的数字)
  • 使用Flash远程桌面(有人建议HTML5,但不解决浏览器扩展监听键盘事件;仅限于Flash,Java等均可)。
  • 基于非常复杂的Javascript保护(除去非白色列出的事件监听器,与实际星号字符等保护输入沿着内存输入值)(不可行的,除非它已经存在)
  • 浏览器扩展与防病毒软件或可能以某种方式保护特定网页的作用(这是不可行的,甚至是不可能的,而无需创建一个巨大的问题阵列)

编辑 :谷歌浏览器禁用隐身模式的扩展,但是,没有检测或自动启用隐身模式等等必须显示一个永久的警告没有标准的方式。

Answer 1:

这是不是一个完整的解决方案上,但您可以通过使用JavaScript提示避开键盘记录。 我写了一个小的测试案例(其中最终获得一点点失控)。 这个测试用例执行以下操作:

  • 使用提示()索要焦点的信用卡号码。
  • 提供当用户勾选“防止额外的对话”,或者如果用户以某种方式能够在键入CC场的故障保护
  • 定期检查,以确保事件处理程序没有被删除或伪造,并重新绑定/警告,当用户需要。

http://jsfiddle.net/ryanwheale/wQTtf/

测试在IE7 +,铬,FF 3.6+,机器人2.3.5,iPad 2的(的iOS 6.0)



Answer 2:

如果能够禁止别人的浏览器扩展通常意味着接管浏览器。 我不认为这是可能的。 这将是一个巨大的安全隐患。 你的目的也许合法,但考虑站长编程禁止用户addblockers为了让他们查看advertisments场景。

最后,它是用户的责任,以确保使网上银行交易时,他们有一个干净的操作系统。 这并不是网站的故障,用户被泄露

UPDATE我们应该换东西了。 就像是:

<meta name="disable-extension-feature" content="read-dom" />

要么

<script type="text/javascript">
    Browser.MakeExtension.MallwareLogger.to.not.read.that.user.types(true);
</script>

不存在的,我敢肯定不会有在不久的将来实现。 使用最好使用当前最新的现有技术和作为最好的,你可以安全的明智设计的App任何必要的手段。 不要浪费你的精力试图掩盖了谁souldn't首先要进行支付在互联网用户



Answer 3:

你的问题是有趣的,周到的(+1),但不幸的是,提出的安全性并没有提供真正的安全,因此没有浏览器将永远不会实现它。

一个浏览器/网络/网络安全的核心原则是实现一个假的防伪特征的愿望抗拒。 网络将与比没有功能不太安全!

听我说:

一切都在执行客户端可以被操纵。 浏览器是只是一个HTTP客户端会谈到服务器; 服务器永远也不会相信的计算结果,或者在前端的Javascript进行检查。 如果有人能简单地绕过与扩展浏览器执行你的“安全”校验码,就可以直接肯定火的HTTP请求到服务器与curl做到这一点。 至少,在浏览器中,熟练的用户可以转向萤火虫或Web检查并绕过你的脚本,就像当你调试你的网站,你做什么。

<meta>标记从注射停止扩展确实使网站更加健壮,但不是更安全。 有一千种方式来写JavaScript的强劲比祈祷没有一个邪恶的扩展。 隐藏您的全局函数/对象是其中之一,并进行环境合理性检查是另一个。 的GMail检查萤火虫,例如。 许多网站检测广告块。

<meta>标记有一定道理的隐私(再次, 没有安全性)方面。 应该有一种方法来告诉浏览器,目前存在于DOM的信息是敏感的(如我的银行存款余额),不应该被暴露给第三方。 然而,如果用户使用的的厂商的操作系统,浏览器厂商B,从厂商的C扩展,而无需通过阅读它的源代码知道他们做什么 ,用户已经表示他信任这些商贩。 您的网站将不会在这里有毛病。 谁真正在乎隐私的用户将转向他们信赖的操作系统和浏览器,并使用另一个配置文件或私有模式的浏览器来检查他们的敏感信息。

结论:如果你在服务器端(再次)所有的输入检查,您的网站是足够安全,没有<meta>标签可以使它更安全。 做得好!



Answer 4:

这不会工作,但我会尽力各地使用document.createElement东西=函数(){}; 这应该不会影响客户端脚本(Greasemonkey的)

您也可以尝试使用隐藏输入提交当前DOM myform.onsubmit=function(){myform.hiddeninput.value=document.body.innerHTML;}和检查服务器端不需要的DOM元素。 我猜使用服务器端生成的每一个元素的ID /令牌可以在这里帮助(如注射DOM节点肯定会想念它)

=>页面看起来应该像

<html uniqueid="121234"> <body uniqueid="121234"><form  uniqueid="121234"> ...

因此,找到在POST操作未跟踪元件应易于(例如使用的xpath)

<?php
simplexml_load_string($_POST['currentdom'])->xpath("*:not(@uniqueid)") //style

周围的东西的DOM注入问题。

至于键盘记录的一部分,我不认为你可以做任何事情,以防止客户端侧透视键盘记录器(除了使用虚拟键盘和左右),因为没有办法从浏览器内部辨别它们。 如果你是偏执狂,你应该尝试一个100%的画布生成的设计(模仿HTML元素和交互),因为这可能会保护你(没有DOM元素绑定到),但是这意味着建立在浏览器中的浏览器。



Answer 5:

我看到类似的东西正在做很多次,虽然保护是在其他方式导向:不少网站,当他们提供文本将使用一个Flash控件来显示文本(例如形式敏感信息,电子邮件地址,这将由机器人另行发现垃圾邮件)。

闪光小程序可以被配置为拒绝来自HTML页面,实际上,除非您特别希望这是可能的,它不会开箱的任何代码。 Flash还没有重新分派事件到浏览器,因此,如果键盘记录器的工作原理上的浏览器的水平,这将无法登录按下键。 当然,Flash有其自身的缺点,但考虑到所有其他选项,这似乎是最可行的。 所以,你不需要通过Flash远程桌面,简单的嵌入式applet将是一样好。 此外,独立的Flash不能被用来做一个全功能的远程桌面客户端,你会寻找到NaCl或JavaFX的,这将使这个被企业用户只使用,只有通过私人用户最终。

其他的事情要考虑:写你自己的扩展。 制作Firefox扩展是很容易+,你可以重复使用大量的JavaScript代码,因为它也可以使用JavaScript。 我从来没有写过一个谷歌Chrome或MSIE扩展,但我想这不是更加困难。 但你并不需要把它变成一个杀毒扩展。 随着可用的工具,你可以把它所以没有其他扩展可以在正在发生的事情在自己的分机偷听里面。 我不知道你的听众将如何迎接友好是的,但如果你是针对企业部门,那么观众,在某种程度上,一个非常好的一个,因为他们没有得到选择他们的工具...所以你只需预留他们使用的扩展。

任何更多的想法? -嗯,这个人是非常直接和有效的:让用户打开一个弹出窗口/分离选项卡和而禁止JavaScript :)我的意思是,你可以拒绝,如果JavaScript是在能够接受信用卡信息浏览器 - 显然,这是很容易检查。 这需要从用户一些心理努力找到设置,在那里他们可以将其禁用+它们将被肆虐在弹出的窗口......但几乎可以肯定,这将禁用所有代码注入:)



Answer 6:

而就在大家都知道,我们不能明确阻止我们的代码扩展,一个另一种方式可以找到连接到如密码,SSN重点领域和也对身体像按键,KEYUP,KeyDown和验证是否事件的事件侦听器的列表听众属于你的代码,如果不只是抛出一个闪光消息禁用插件。

你可以将突变事件到您的网页,看看是否有正在创建/从你的代码由第三方产生分开一段新的节点。

确定其明显的,你会得到性能问题,但那是一个权衡你的安全。

任何考生?



文章来源: Protect against browser extension injected Javascript code