我正试图想出一种方法,用户可以输入能够在服务器端和客户端运行的代码片段。在理想的世界中,我在服务器上有一个LUA解释器或Javascript引擎,我可以调用它,但我不认为这些是一个简单的解决方案(在我的开发机器上设置或找到一个将会这样做的主人。)
我已经想到允许用户编写一个代码片段以在Javascript中运行,然后将其翻译为在PHP中使用。
用法是为用户编写执行各种操作的函数调用的内部。一个(非常)简单的例子是为用户提供一个参数'amount'的函数,他们可以编写一个像amount * 1.05
这样的字符串(然后在Javascript中转换为function(amount) { return amount * 1.05; }
,或{{ PHP中的一个更复杂的例子是function($amount) { return $amount * 1.05; }
。为了保护PHP方面,只有公认的变量名(函数参数,例如前面两个例子中的数量或速度)都有$它们,以及某些已知的Javascript库调用或函数(如Math)将被翻译(在Math的情况下,所有Javascript函数都与PHP直接兼容,因此我们只删除“Math。”)。然后PHP代码运行(speed < 9) ? Math.pow(speed, (10 / 3)) : Math.pow(speed, (10 / 3) + (-0.5 * Math.log(10 - speed) / Math.log(10)))
之类的东西来获取服务器端功能。
我的问题是 - 尽管我试图限制可以运行的东西,但这可能会以某种方式被利用吗?我可以做些什么改进?
$func = eval(Pseudocode::generatePhpCode($code));