我有一个项目,用户可以在其中提交 JavaScript 代码。但是,我想检查一下,在提交的代码中仅使用了某个 javascript 对象的方法和属性。例如我的对象的名称是 X,那么用户应该只允许使用:
X.method1();
X.method2();
X.method3(X.propertyA);
if(X.booleanPropertyB)
{
X.method(X.propertyWOW);
}
不应该允许他们创建新的变量或使用 JavaScript 对象(如文档、窗口或导航器)的属性或方法。
根据这些规则验证脚本的好方法是什么?无论是在 JavaScript 内部还是通过服务器端验证器,例如用 Java 编写。
到目前为止,我的想法是使用服务器端验证器并检查每个分号之后以及每个左大括号之后的第一个非空白字符是否为“X”。或保留字,如 if、else、while、for 等
但是,我认为我过于简单化了,并且想知道您对这是否是合理方法的想法。
谢谢。
最佳答案
您的问题有两个部分:
- 确保用户使用您的对象 X
您可以通过在测试中模拟对象并检查是否使用了相关对象方法来实现此目的。请参阅here Jasmine 是如何做到的
限制用户访问某些 API 实现它的简单方法是在闭包内运行用户代码。例如
;(function(window, document, console, eval, alert, setTimeout, setInterval){ // run user code here // window, document etc. are inaccesible and null in this context })(null, null, null, null, null, null);
但是,这并不妨碍用户声明自己的东西、变量、函数等。
关于javascript - 将 JavaScript 代码限制/验证到特定库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52965298/