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

问题描述 投票:0回答:1

我想让用户输入一个字符串,该字符串将在 math.js 中作为表达式进行计算。我该怎么做才能防止恶意使用此功能?

javascript math.js
1个回答
2
投票

您指的是哪种恶意使用?

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 秒的表达式。

© www.soinside.com 2019 - 2024. All rights reserved.