[英]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.