我有一个数据javascript文件,它通过一些自定义代码动态添加到网站。 此文件来自第三方供应商,可能会在文件中添加恶意代码
在将此文件添加到网站之前,我想解析它,并查找恶意代码,例如重定向或警报,这些代码在项目/网站中包含文件时会被执行。
例如,我的js文件可能如下所示:
alert ('i am malicious');
var IAmGoodData =
[
{ Name :'test', Type:'Test2 },
{ Name :'test1', Type:'Test21' },
{ Name :'test2', Type:'Test22' }
]
我通过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
}
最后一行将返回索引0,因为在文件中的索引0处找到单词alert。
问题:
答案 0 :(得分:3)
不要让它们包含var IAmGoodData =
,而是让它们只提供JSON(基本文件的其余部分是什么,或者似乎是)。然后使用JSON.parse()
将其解析为JSON。如果失败,他们要么没有很好地遵循JSON格式,要么有外部代码,在任何一种情况下你都会忽略响应。
例如,您希望外部文件中的数据如下:
[
{ Name :'test', Type:'Test2' },
{ Name :'test1', Type:'Test21' },
{ Name :'test2', Type:'Test22' }
]
需要正确序列化为JSON(双引号而不是单引号,以及键周围的双引号)。在您的代码中,您将使用:
var json;
try {
json = JSON.parse(client.responseText);
catch (ex) {
// Invalid JSON
}
if (json) {
// Do something with the response
}
然后,您可以遍历json
并访问每个Name
和Type
属性。
随机备注:
在client.onreadystatechange
回调中,请务必检查client.readyState === 4 && client.status === 200
,以确认请求已成功并已完成。
答案 1 :(得分:0)
这很难做到。 JavaScript中没有本质上恶意关键字或函数,还有恶意应用程序。您可能会对“恶意”活动产生误报,并阻止执行具有实际目的的合法代码。与此同时,任何有一点想象力的人都可以绕过你可能实施的任何“预防性”方法。
我建议你寻找一种不同的方法。这是其中一个问题(如CAPTCHA),其中人类无法解决这些问题,而机器实际上是不可能的。您可以尝试让主持人或某些人工评估员来解释代码并接受它。
答案 2 :(得分:0)
你应该让他们提供有效的JSON而不是任意的Javascript
然后,您可以调用JSON.parse()
来读取其数据,而不会有任何代码执行风险。
简而言之,数据不是代码,并且不应该包含代码。
答案 3 :(得分:-3)
你不应该。应该允许用户输入他们想要的任何内容,并且显示它是你的工作。
这一切都取决于它的放置位置,当然:
mysql_real_escape_string
或等同于您正在使用的任何引擎。htmlspecialchars
,JavaScript中的createTextNode
或.replace(/</g,"<")
json_encode
,JavaScript中的JSON.stringify
。在一天结束时,只需don't be Yahoo