如何检查函数是否为纯函数?

时间:2015-10-13 16:17:33

标签: javascript node.js

我正在研究react-metaform,我的一个挑战是我需要允许最终用户将元数据定义为函数。例如:

socialSecurityNumber.required: (m) => m.type == 'person'

问题很明显:我无法信任用户。所以,这些是我计划制定的预防措施:

  • 用户定义的函数应该是纯函数。从某种意义上说,这些函数只能访问它们的参数,没有别的。
  • 用户定义的函数将在一个对异常具有弹性,执行时间过长和无限循环的环境中运行。 (我现在不担心这个。)

问题是:如何确保用户定义的功能仅访问它的参数而不是其他内容?

1 个答案:

答案 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);