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

时间:2015-02-19 02:50:04

标签: javascript browser dojo websocket malware

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

进一步调查显示,罪魁祸首实际上是Sendori“浏览器助手”工具,该工具作为购物助手销售,但实际上使用来自Superfish的工具进行网络广告替换。 (边栏:在诊断时我花了几个小时试图在我的浏览器上安装Sendori / Superfish。我失败了,因为谷歌搜索“Sendori”和/或“superfish”产生了数百个“删除Sendori”页面,但没有一个“安装Sendori”页面。我想在他们的机器上没有人真的想要这个。)

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

... (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';
....

我唯一的希望是我的初始加载器在任何注入的代码之前执行,这意味着我可以在它开始之前将其击败。

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

编辑:在联想/ Superfish问题爆发之前我问过这个问题很有趣。

3 个答案:

答案 0 :(得分:3)

请记住,如果浏览器遭到入侵,您几乎无能为力。

仍然......这是一个疯狂的想法......

如果恶意软件在文档末尾追加JS ...尝试在您的doucument结束时附加<!--

您的文件是这样的:

<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标记之外的事情令人难以置信)。

如果插件更智能并且在</html>标签之后添加代码......那么此解决方案不会起作用,但我认为值得尝试。这一切都归结为确定解析文档和插入垃圾时恶意软件的智能程度。但我认为如果最后添加内容,那是因为根本没有进行任何解析。

如果找到</html>标记,您可以尝试执行以下操作:

<html>
    <body>
        <b>Test</b>
    </body>
<!-- 
</html>
-->
</html>
<!-- 
</html>

这将导致恶意软件在伪造的</html>标记之后立即在已注释的区域中添加垃圾箱。如果恶意软件从顶部读取,则存在伪造的,如果从底部读取则存在另一个伪造的。

现在,如果恶意软件实际上正确地解析了HTML文档......那么我不确定是否有解决方案。

答案 1 :(得分:2)

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

基本上,Sendori是恶意软件 - 并且在恶意软件侵扰的浏览器中,所有关闭执行环境的机会都是关闭的。问题出在客户端 - 您无法从服务器端修复它。

答案 2 :(得分:0)

您可以使用“同源策略”

阻止资源的跨域起源

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

https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

http://www.w3.org/TR/cors/#access-control-allow-origin-response-header