我正在开发react-metaform,其中一个挑战是我需要允许最终用户将元数据定义为函数。例如:
socialSecurityNumber.required: (m) => m.type == 'person'
问题很明显:我不能相信用户。因此,这些是我计划采取的预防措施:
- 用户定义的函数应该是纯函数。也就是说,这些函数只能访问它们的参数,而不能访问其他任何东西。
- 用户定义的函数将在一个对异常、执行时间过长和无限循环具有弹性的环境中运行。(目前我不担心这个问题。)
我正在开发react-metaform,其中一个挑战是我需要允许最终用户将元数据定义为函数。例如:
socialSecurityNumber.required: (m) => m.type == 'person'
function test() {
console.log("This is my secret!");
}
function parser(f) {
document.body.innerHTML = test.toString();
}
parser(test);
function() { [].__proto__.slice = function() { return "I've screwed you app!"; }; }
这样的东西呢(它不使用自由变量)? - Bergi[].__proto__.slice
的赋值不是对用户参数的赋值。 - MartyIXeval
并希望一切都好。你可以仅启用函数参数的基本算术运算……据我所知,在某些情况下这可能已经足够了。 - MartyIX
new Function
。 - Bergithis
设置为undefined
来调用它,从而防止其访问或创建全局变量。但是,您仍然会遇到无限循环问题,这只能通过子进程来解决。 - T.J. Crowder