我想让用户输入一个字符串,该字符串将在math.js中作为表达式进行评估。我该怎么做才能防止恶意使用此功能?
答案 0 :(得分:0)
您的意思是什么样的恶意使用?
math.js拥有自己的表达式解析器,因此可以安全地防止XSS攻击。您不能像使用JavaScripts eval
那样使用任意JavaScript代码,这可能会很危险。
你可以很容易地做的是执行一个炸毁内存和CPU的表达式,比如创建一个非常大的矩阵或其他东西(math.eval('zeros(1e100, 1e100)')
)。
如果要防止这种情况发生,则必须在单独的Web worker(客户端)或child_process(node.js服务器)中运行表达式解析器,这样您可以在花费太长时间时终止该进程。您可以使用workerpool这样的库。这个库例如由math.js(http://api.mathjs.org)的REST API用来杀死运行10秒以上的表达式。