Javascript 恶意软件将代码注入我的Dojo/WebSocket应用程序:如何防止?

Javascript 恶意软件将代码注入我的Dojo/WebSocket应用程序:如何防止?,javascript,browser,dojo,websocket,malware,Javascript,Browser,Dojo,Websocket,Malware,我已经为嵌入式产品编写了一个web UI,它构建在Dojo上,并使用WebSocket与设备通信。它在大多数浏览器上运行良好且可靠,但在许多客户机器上,WebSocket无法连接。我终于能够在客户机器上看到这个问题,这是一些试图访问本地存储的JavaScript中抛出的安全错误。关键是:错误代码实际上来自superfish.com,并通过安装在客户机器上的工具注入到我的web应用程序中 进一步调查表明,罪魁祸首实际上是Sendori的“浏览器助手”工具,该工具以购物助手的身份销售,但实际上使用S

我已经为嵌入式产品编写了一个web UI,它构建在Dojo上,并使用WebSocket与设备通信。它在大多数浏览器上运行良好且可靠,但在许多客户机器上,WebSocket无法连接。我终于能够在客户机器上看到这个问题,这是一些试图访问本地存储的JavaScript中抛出的安全错误。关键是:错误代码实际上来自superfish.com,并通过安装在客户机器上的工具注入到我的web应用程序中

进一步调查表明,罪魁祸首实际上是Sendori的“浏览器助手”工具,该工具以购物助手的身份销售,但实际上使用Superfish的工具替换网络广告。(侧栏:在诊断这一问题时,我花了几个小时试图在我的浏览器上安装Sendori/Superfish。我失败了,因为谷歌搜索“Sendori”和/或“Superfish”生成了数百个“Remove Sendori”页面,但没有一个“Install Sendori”页面。我想没有人真的想在他们的机器上安装它。)

Sendory/Superfish代码以某种方式添加到我的标记之后:

。。。(我的页面)。。。
变量sndpID='99999';
var sndgID=“{59AD66B3-91A0-4FEC-8E84-160E95E1FF89}”;
变量msetry=0;
var msSecurityFlag=1;
var programData='Sendori';
....
我的一个希望是,我的初始加载程序在任何注入代码之前执行,这意味着我可能能够在它启动之前将其删除

那么,如何防止恶意代码弄乱我的代码呢?是的,我可能可以从这个客户的机器上卸载Sendori(虽然我的第一次尝试失败),但是还有其他所有有相同问题的客户,他们甚至不知道Sendori在那里


编辑:在联想/Superfish事件爆发之前,我问了这个问题,这有点有趣。

你不能阻止代码运行,因为从JS引擎的角度来看,运行它是你想要的——否则你就不会发送它了。JS引擎不知道,代码是由第三方插入的


基本上,Sendori是恶意软件——如果浏览器中充斥着恶意软件,那么所有正常执行环境的可能性都会降低。问题出在客户端-您无法从服务器端解决。

您可以使用“同源策略”阻止资源的跨域源

这意味着不会加载任何非源于服务器的资源


请记住,如果浏览器遭到破坏,您将无能为力

还是。。。这里有一个疯狂的想法


如果恶意软件在文档末尾附加JS。。。尝试附加
,这不会阻止相关脚本加载自己,也不会阻止脚本导致的错误。目前还不清楚这如何帮助解决这个问题。这些工具将允许我指定我的web资源是否可以用于其他领域。似乎没有一种机制来指定是否可以在我的域中使用其他域的资源。因此,这似乎不相关。请查看“原点定义”顶部的图表:。Mozilla声称它将阻止浏览器请求外部content.Hmmm。这可能取决于何时添加代码以及如何插入代码。我想知道您是否可以在DOM级别钩住
.appendChild
,检查插入的内容,如果内容是
sendori.com
中的脚本标记,则跳过实际的appendChild操作?如果这是一种可能性,那么你可以让他们的代码从一开始就不会被插入。我一定要试试这个。有强有力的间接证据表明,攻击者没有解析页面,因为如果他*解析页面,那么a)他会破坏结构糟糕的页面,b)他可能会将代码插入其他地方(例如头部)。*为我使用“他”向女程序员道歉,但大多数恶意程序员都是男性,这仍然是事实。(有一天这将不再是真的;我不知道我是应该欢迎它,还是应该害怕它。)成功了:注入的代码现在被注释掉了。我的应用程序仍然无法运行,不过。。。我得弄清楚这台机器上还有什么地方坏了。很好。我也会考虑把它添加到我的页面上。嘿,你终于找到阻止页面工作的原因了吗?
... (my page) ...
</body>
</html>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
<script type="text/javascript" src="http://cdn.sendori.com/js/inlinekeywords.js"></script>
<script type="text/javascript" src="http://cdn.sendori.com/js/pconfig.js"></script>
<script type="text/javascript">
var sndpID = '99999';
var sndgID = '{59AD66B3-91A0-4FEC-8E84-160E95E1FF89}';
var mseEntry = 0;
var msSecurityFlag = 1;
var programData = 'Sendori';
....
<html>
    <body>
        <b>Test</b>
    </body>
</html>
<html>
    <body>
        <b>Test</b>
    </body>
</html>
<script>
    alert('script added');
</script>
<html>
    <body>
        <b>Test</b>
    </body>
</html>
<!--
<html>
    <body>
        <b>Test</b>
    </body>
</html>
<!--
<script>
    alert('script added');
</script>
<html>
    <body>
        <b>Test</b>
    </body>
<!-- 
</html>
-->
</html>
<!-- 
</html>