这是我的情况。我正在构建一个应用程序,其中包含一些繁重的数学计算,其中公式需要由具有足够特权但不受信任的用户编辑。
我需要一种安全的服务器端脚本语言。我需要能够访问 4 个以上数据库表中的常量和值、先前计算的结果、定义用户变量和函数、使用 if/then/else 语句,而且我确信还有更多我想不到的东西现在。
我考虑过的一些选项:
我考虑过使用类似这个 matheval 库的东西,但我最终需要为我的用例大幅扩展它。我基本上是在创建自己的自定义语言。
PHP runkit 沙箱。我以前从未使用过它,但我非常担心所涉及的安全问题。考虑到可能的安全问题,我认为这不是一个可行的选择。
我不知道是否有可能的另一个想法是在服务器端使用类似 javascript 的东西。我已经看到 js 在桌面应用程序中用作脚本平台来扩展功能,并且似乎类似的方法可能是可行的。我可以理想地定义运行它的环境,例如禁用文件系统访问等。同样,安全性似乎是一个问题。
从我所做的研究来看,#1 似乎是我唯一的选择,但我想我会检查一个更大的人才库。:-)
如果#3 是可能的,这似乎是要走的路,但我似乎无法找到任何有用的东西。另一方面,#2 和#3 之间可能没有太大区别。
性能是另一个考虑因素。大约有 65 个奇怪的公式,每个公式执行大约 450 次。每个公式都可以访问大约 15 个唯一变量、一百个左右的常数,以及之前公式的结果。(是的,有一个特定的执行顺序。)
我可以使用异步方法进行计算,其中计算将由用户事件启动并存储在数据库中,但宁愿不必这样做。
处理这种情况的最佳方法是什么?我的研究中是否还有其他第三方库没有出现?除了我的 3 之外,我还应该考虑其他选择吗?