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

Malware injecting code into my Dojo/WebSocket app: how prevent?

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

进一步调查表明,罪魁祸首实际上是 Sendori "browser helper" 工具,该工具作为购物助手进行营销,但实际上使用 Superfish 的工具进行网络广告替换。 (边栏:在诊断这个问题时,我花了几个小时试图在我的浏览器上安装 Sendori/Superfish。我失败了,因为谷歌搜索 "Sendori" and/or "superfish" 产生了数百个 "Remove Sendori" 页,但没有一个 "Install Sendori" 页。我想没有人真的想要在他们的机器上使用它。)

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

... (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 在那里。

编辑:我在 Lenovo/Superfish 问题爆发之前问这个问题有点有趣。

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

从根本上说,Sendori 是恶意软件 - 有了恶意软件感染的浏览器,一个健全的执行环境的所有机会都会消失。问题出在客户端 - 您无法从服务器端修复它。

您可以使用 "Same Origin Policy"

阻止资源的跨域来源

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

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

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

请记住,如果浏览器受到威胁,您将无能为力。

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

如果恶意软件在文档末尾附加 JS...尝试在文档末尾附加 <!--

你的文档是这样的:

<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 文档……嗯,我不确定是否有解决方案。