防止浏览器扩展注入Javascript代码

防止浏览器扩展注入Javascript代码,javascript,internet-explorer,firefox,google-chrome,browser,Javascript,Internet Explorer,Firefox,Google Chrome,Browser,浏览器允许扩展注入代码、操作DOM等 多年来,我注意到我正在观看的一个网站(应用程序)上出现了很多各种各样的错误(使用window.onerror),这些错误是由Firefox、Chrome和Internet Explorer(所有版本)上未知的浏览器扩展生成的 这些错误似乎没有打断任何事情。现在我想提高这个网站的安全性,因为它将开始处理信用卡。我亲眼看到恶意软件/间谍软件通过修改的浏览器扩展(无辜的浏览器扩展,修改为向攻击者/脚本小子报告)感染浏览器,这些浏览器作为键盘记录程序(使用琐碎的on

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

多年来,我注意到我正在观看的一个网站(应用程序)上出现了很多各种各样的错误(使用window.onerror),这些错误是由Firefox、Chrome和Internet Explorer(所有版本)上未知的浏览器扩展生成的

这些错误似乎没有打断任何事情。现在我想提高这个网站的安全性,因为它将开始处理信用卡。我亲眼看到恶意软件/间谍软件通过修改的浏览器扩展(无辜的浏览器扩展,修改为向攻击者/脚本小子报告)感染浏览器,这些浏览器作为键盘记录程序(使用琐碎的onkey*事件处理程序,或仅使用input.value检查)

是否有方法(元标记等)通知浏览器不允许代码注入或读取DOM,标准还是非标准?网页已经是SSL,但这似乎并不重要(如提示浏览器为扩展激活更严格的安全性)

可能的解决方法(类似于拉伸而不是简单的元标记)由其他人建议或在我的头顶上:

  • 用于输入数字+非文本输入的虚拟键盘(也称为数字img)
  • 使用Flash的远程桌面(有人建议使用HTML5,但这并不能解决浏览器扩展监听键盘事件的问题;只有Flash、Java等可以)
  • 非常复杂的基于Javascript的保护(删除非白名单事件侦听器、内存中的输入值以及使用实际asterix字符保护的输入等)(不可行,除非它已经存在)
  • 具有防病毒功能的浏览器扩展,或者可以以某种方式保护特定网页(这是不可行的,如果不产生大量问题,甚至不可能实现)

编辑:Google Chrome在匿名模式下禁用扩展,但是,没有检测或自动启用匿名模式的标准方法,因此必须显示永久警告。

能够禁用某人的浏览器扩展通常意味着接管浏览器。我认为这是不可能的。这将是一个巨大的安全风险。你的目的可能是合法的,但是考虑网站管理员为用户禁用程序的目的,以便让他们查看广告。 最终,用户有责任确保他们在进行网上银行交易时有一个干净的操作系统。用户被泄露并不是网站的错

更新 我们应该总结一下。 比如:

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


Browser.MakeExtension.MallwareLogger.to.not.read.that.user.types(true);
不存在,我相信在不久的将来不会实现。
使用任何必要的手段,以最佳方式使用当前最新的现有技术,并尽可能以最佳安全性设计您的应用程序。不要浪费你的精力去为那些本来就不应该通过互联网付款的用户提供保护

我看到过很多次类似的做法,尽管保护是以另一种方式进行的:相当多的网站,当他们以文本形式提供敏感信息时,会使用Flash小部件来显示文本(例如,电子邮件地址,否则会被机器人程序和垃圾邮件发现)

Flash小程序可能被配置为拒绝来自HTML页面的任何代码,事实上,除非您特别期望这是可能的,否则它不会立即运行。Flash也不会将事件重新发送到浏览器,因此如果键盘记录器在浏览器级别工作,它将无法记录按下的键。当然,Flash有其own有缺点,但考虑到所有其他选项,这似乎是最可行的。因此,您不需要通过Flash实现远程桌面,简单的嵌入式小程序也一样好。此外,单凭Flash无法实现全功能远程桌面客户端,您需要研究NaCl或JavaFX,这将使其仅适用于公司用户等最终由私人用户提供

其他需要考虑的事情:编写自己的扩展。制作Firefox扩展非常简单+你可以重用大量JavaScript代码,因为它也可以使用JavaScript。我从来没有编写过Google Chrome或MSIE扩展,但我想这并不难。但你不需要将其转换为防病毒扩展。使用这些工具你可以使它可用,这样就没有其他扩展可以窃听你自己的扩展内部发生的事情。我不确定你的听众会有多友好,但如果你的目标是企业部门,那么在某种程度上,这些听众是一个非常好的听众,因为他们无法选择他们的工具……所以你可以强制他们使用ext紧张


还有什么想法吗?这个想法非常直接有效:让用户打开一个弹出窗口/单独的选项卡并禁用其中的JavaScript:)我的意思是,如果浏览器中启用了JavaScript,您可以拒绝接受信用卡信息-显然,这很容易检查。这将需要用户的一些脑力劳动来找到设置,在那里他们可以禁用它+他们将在弹出窗口上愤怒。。。但几乎可以肯定的是,这将禁用所有代码注入:)

这不起作用,但我将尝试使用document.createElement=function(){}; 这会影响客户端脚本(greasemonkey)

您还可以尝试使用隐藏输入提交当前DOM
myform.onsubmit=function(){myform.hiddeninput.value=document.body.innerHTML;}
并检查服务器端是否有不需要的DOM元素。我想在每个元素上使用服务器端生成的id/令牌可能会有所帮助(因为注入的DOM节点肯定会错过它)

=>页面应该看起来像

<html uniqueid="121234"> <body uniqueid="121234"><form  uniqueid="121234"> ...
。。。
因此,在POST操作中查找未跟踪的元素应该是
<html uniqueid="121234"> <body uniqueid="121234"><form  uniqueid="121234"> ...
<?php
simplexml_load_string($_POST['currentdom'])->xpath("*:not(@uniqueid)") //style
prompt('Please enter your credit card number');