我正在研究react-metaform,我的一个挑战是我需要允许最终用户将元数据定义为函数。例如:
socialSecurityNumber.required: (m) => m.type == 'person'
问题很明显:我无法信任用户。所以,这些是我计划制定的预防措施:
问题是:如何确保用户定义的功能仅访问它的参数而不是其他内容?
答案 0 :(得分:1)
我会使用esprima来解析用户'存储在文件或数据库中的JavaScript函数。而且我只允许运行通过解析测试的代码(仅列入白名单的功能 - 使用局部变量,参数......)。
您可以从一个非常简单的检查代码开始,该代码只允许非常有限的脚本并逐步改进它。但是,我猜你会为解决方案付出很多努力,因为你的用户总是想要更多。
注意: Angular.js用于依赖注入这种':https://jsfiddle.net/987Lwezy/
function test() {
console.log("This is my secret!");
}
function parser(f) {
document.body.innerHTML = test.toString();
}
parser(test);