如何使字符串安全地用作math.js表达式

How to make a string safe to use as a math.js expression

本文关键字:math js 表达式 何使 字符串 安全      更新时间:2023-11-08

我想让用户输入一个字符串,该字符串将在math.js中作为表达式进行求值。如何防止恶意使用此功能?

你的意思是什么恶意使用?

math.js有自己的表达式解析器,因此可以安全地抵御例如XSS攻击。您不能像使用JavaScripts eval那样只插入任意的JavaScript代码,这在使用时可能很危险。

不过,你可以很容易地执行一个表达式,它会耗尽内存和CPU,比如创建一个非常大的矩阵或其他东西(math.eval('zeros(1e100, 1e100)'))。

如果你想防止这种情况发生,你必须在一个单独的web工作程序(客户端)或child_process(node.js服务器)中运行表达式解析器,这样当它花费太长时间时,你就可以终止这个进程。你可以使用workerpool这样的库来实现这一点。例如,math.js的REST API使用此库(http://api.mathjs.org)以终止运行超过10秒的表达式。