javascript 评估用户提交的简单数学node.js

标签 javascript node.js eval

我需要评估一些简单的用户提交的数学。例如,2 个数字的乘法。

这使我容易受到注入(inject)攻击。

我的计划是将一堆值列入白名单[^|(|)|\d+|\*|\/|\+|-],并在评估之前用正则表达式替换其他所有内容。

这有什么问题吗?

示例字符串:

324*32
(5+4-17) / 3

最佳答案

我想不出任何特别令人讨厌的方法来仅使用数字和少数运算符来过多地搞乱您的服务器,但是,您需要注意一些事情:

鉴于 [^...] 是一个字符类,您不需要用 | 分隔每个值。这可能是您真正想要的:[^^()\d*\/+-]。这将匹配您想要允许的一切。

此外,请务必记住,在 JavaScript 中,^ 并不代表幂,而是代表“异或”。例如,这意味着 2 ^ 3 == 1。因此,您可能不想将 ^ 列入白名单:[^()\d*\/+-]

您可能会遇到像 (1 * (2 + 3) 这样的无效语法,因此您也应该注意这一点。您可能只需要一个 try catch block 并有意义地处理类似的事情(将问题报告给用户或其他东西)。

关于javascript 评估用户提交的简单数学node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6043874/

相关文章:

javascript - 除了使用 eval/handleAs : "javascript" to dynamically fetch scripts (via XMLHttpRequest) 之外,还有什么办法吗

mysql - MySQL 使用哪个版本的 UUID?

node.js - 如何使用node.js从push-it提供client-js服务

javascript - 如何在JavaScript中不写 "eval"就执行 "eval"

javascript - 如何将 PouchDB 引用为对象的属性而不对其进行多次初始化?

javascript - 阿多尼斯迁移 :run fails on Gitlab deployment

javascript隐藏eval

javascript - 如何将这个 Javascript 包装为一个函数?

java - 当 Bootstrap 调用远程模式时,Google reCaptcha 不会加载

asp.net - 在母版页中包含 Javascript 和 css,在 asp.net 中包含用户控件