Javascript - 清理文件中的恶意代码(字符串)

jor*_*dan 2 javascript security sanitization

我有一个数据 javascript 文件,它通过一些自定义代码动态添加到网站。该文件来自第三方供应商,他们可能会在文件中添加恶意代码

在将此文件添加到网站之前,我想对其进行解析,并查找恶意代码,例如重定向或警报,这些代码本质上是在项目/网站中包含的文件上执行的。

例如,我的 js 文件可能如下所示:

alert ('i am malicious');
var IAmGoodData = 
[
{ Name :'test', Type:'Test2 },
{ Name :'test1', Type:'Test21' },
{ Name :'test2', Type:'Test22' }
]
Run Code Online (Sandbox Code Playgroud)

我通过 XMLHttpRequest 调用将此文件加载到对象中,当此调用返回时,我可以使用该变量(这是我的文件文本)并在其中搜索单词:

var client = new XMLHttpRequest();
client.open('GET', 'folder/fileName.js');

client.onreadystatechange = function() 
{
        ScanText(client.responseText);
}
client.send();

function ScanText(text)
{
        alert(text);
        var index = text.search('alert');  //Here i can search for keywords
}
Run Code Online (Sandbox Code Playgroud)

最后一行将返回索引 0,因为单词alert 位于文件中的索引 0 处。

问题:

  1. 有没有更有效的方法来搜索文件中的关键字?
  2. 我应该搜索哪些特定关键字以防止恶意代码运行?即重定向、弹出窗口、声音等......

Ian*_*Ian 5

不要让它们包含var IAmGoodData =,而是让它们简单地提供 JSON(这基本上就是文件的其余部分,或者看起来就是)。然后使用 .json 将其解析为 JSON JSON.parse()。如果失败,则说明它们要么没有很好地遵循 JSON 格式,要么具有外部代码,无论哪种情况,您都会忽略响应。

例如,您期望来自外部文件的数据,例如:

[
{ Name :'test', Type:'Test2' },
{ Name :'test1', Type:'Test21' },
{ Name :'test2', Type:'Test22' }
]
Run Code Online (Sandbox Code Playgroud)

需要将其正确序列化为 JSON(双引号而不是单引号,并且键周围有双引号)。在您的代码中,您将使用:

var json;
try {
    json = JSON.parse(client.responseText);
catch (ex) {
    // Invalid JSON
}

if (json) {
    // Do something with the response
}
Run Code Online (Sandbox Code Playgroud)

然后您可以循环json并访问每个的Name和属性。Type

随机注:

在回调中client.onreadystatechange,请确保检查client.readyState === 4 && client.status === 200,以了解请求是否成功并已完成。