我正在研究react-metaform,我的挑战之一是我需要允许最终用户将元数据定义为函数。例子:
socialSecurityNumber.required: (m) => m.type == 'person'
问题很明显:我不能信任用户。因此,我计划采取以下预防措施:
- 用户定义的函数应该是纯函数。从这个意义上讲,这些函数只能访问它们的参数,其他什么都不能。
- 用户定义的函数将在对异常、过长的执行时间和无限循环具有弹性的环境中运行。(我现在不担心这个)。
问题是:如何确保用户定义的函数只访问其参数而不访问其他内容
2条答案
按热度按时间ippsafx71#
我将使用esprima解析存储在文件或数据库中的用户JavaScript函数。并且我只允许运行通过解析测试的代码(只允许使用白名单功能——使用局部变量、参数…)。
您可以从一个非常简单的检查代码开始,它只允许非常有限的脚本,并逐步改进它。然而,我想随着时间的推移,您将在解决方案上投入大量精力,因为您的用户总是想要更多。
**注:**Angular 。js使用这种“技巧”进行依赖注入:https://jsfiddle.net/987Lwezy/
fkaflof62#
你可以使用https://github.com/lcrespom/purecheck。它已经有一段时间没有更新了,但似乎支持你所需要的。