我想让用户输入一个字符串,该字符串将在 math.js 中作为表达式进行计算。我该怎么做才能防止恶意使用此功能?
您指的是哪种恶意使用?
math.js 有自己的表达式解析器,因此它可以安全地抵御 XSS 攻击等。您不能像 JavaScript 那样直接添加任意 JavaScript 代码
eval
,这使用起来可能很危险。
您可以轻松执行的操作是执行一个会耗尽内存和 CPU 的表达式,例如创建一个非常大的矩阵或其他东西 (
math.evaluate('zeros(1e100, 1e100)')
)。
如果你想防止这种情况,你必须在单独的 Web Worker(客户端)或 child_process(node.js 服务器)中运行表达式解析器,这样你就可以在进程花费太长时间时终止该进程。您可以使用像 workerpool 这样的库来实现此目的。例如,math.js (https://api.mathjs.org) 的 REST API 使用此库来终止运行超过 10 秒的表达式。