用Java对Javascript进行静态分析

Static analysis of Javascript with Java

本文关键字:静态分析 Javascript Java      更新时间:2023-09-26

我需要使用Java对Javascript文件进行静态分析。在这里,我需要检查Javascript文件是否有任何对document.write()的函数调用或对innerHTML等属性的引用。我可以使用javax.script.*包来实现这一点吗?或者我需要使用哪个Java api进行解析?你也能提供同样的例子吗?

您不能以您想要的方式静态分析Javascript,因为Javascript不是一种静态类型的语言。

你可以检查document.write(),但如果我的代码是这样的呢:

var whatever = document; whatever.write()

还是要拒绝任何名为write()的函数,即使它没有写入文档?

此外,Javascript有一个eval函数,所以您可以随时执行:

var m = "ment"; 
eval("docu" + m + ".wri" + "te('hahahaha')");`.

你打算怎么检查?

同样,可以通过多种方式访问属性。

想象一下这段代码:

var x = document.children[0];
x.innerHTML = ...;
x["inner" + "HTML"] = ...;
var y = "inner";
x[y + "HTML"] = ...;

使用静态分析,你将无法检测到所有这些变体,以及你可以制造的数百种变体。