用Java对Javascript进行静态分析

用Java对Javascript进行静态分析,java,javascript,Java,Javascript,我需要使用Java对Javascript文件进行静态分析。在这里,我需要检查Javascript文件是否有对document.write()的函数调用或对innerHTML等属性的引用。我可以使用javax.script.*包来实现这一点吗?或者我需要使用哪个JavaAPI进行解析?您还可以提供相同的示例吗?您不能按照您想要的方式静态分析Javascript,因为Javascript不是静态类型的语言 您可以检查document.write(),但如果我的代码是: var whatever =

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

您不能按照您想要的方式静态分析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"] = ...;

使用静态分析,您无法检测到所有这些变体,以及您可以生成的数百种变体。

噢。我的错。我已经纠正了,因为你的能力有限。但是,如果你决定进行静态分析,谢谢你的精彩回答。这可以通过使用Java的任何动态解决方案来实现吗?我只想检查是否调用了这些函数/属性。这只是为了获得这些函数调用的统计信息,您只能通过运行代码并以某种方式计算调用的数量来做到这一点。Java中有一个Javascript引擎,但它没有很好地模拟浏览器(我从来没有模拟过浏览器,它可能根本没有这个功能),无法运行大多数Javascript脚本。您最好的选择是查看,它确实模拟了现代浏览器(但不是Java)-您可以将自己的代码插入其中以执行您想要的操作。