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 处。
问题:
不要让它们包含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,以了解请求是否成功并已完成。
| 归档时间: |
|
| 查看次数: |
2704 次 |
| 最近记录: |