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

lb3vh1jj  于 2022-10-22  发布在  Java
关注(0)|答案(2)|浏览(210)

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

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

问题很明显:我不能信任用户。因此,我计划采取以下预防措施:

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

问题是:如何确保用户定义的函数只访问其参数而不访问其他内容

ippsafx7

ippsafx71#

我将使用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);
fkaflof6

fkaflof62#

你可以使用https://github.com/lcrespom/purecheck。它已经有一段时间没有更新了,但似乎支持你所需要的。

相关问题