繁体   English   中英

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

[英]javascript evaluate simple user submitted math node.js

我需要评估一些简单的用户提交的数学运算。 例如,两个数字相乘。

这使我可以进行注入式攻击。

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

有什么问题吗?

字符串示例:

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

我想不出任何特别讨厌的方法,仅使用数字和少数运算符就可能使服务器过于混乱,但是,您需要注意一些事项:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM