And*_*Ray 8 javascript regex math exploit
我的页面上有一个表单字段,如果用户在其中键入一个简单的数学方程式,我想用解决方案替换该值.因此,如果用户键入1 + 2字段并点击,enter我将替换输入值3.
目前我只评估方程式是否匹配此正则表达式:
/^[\d. \+/\*-]+$/
Run Code Online (Sandbox Code Playgroud)
也就是说,如果整个字符串由数字,空格,加号,减号,乘法或除数字符组成.
然后我像这样评估值:
(new Function('try {var a = ' + val + '; return a;} catch(e) {return -1;}'))()
Run Code Online (Sandbox Code Playgroud)
此表单字段可以由查询字符串参数预先填充,客户端将尝试执行它.AKA潜在的攻击将是mysite.com?inputVal=cookieStealingProgram.我不希望用户能够链接到利用代码.
我想在正则表达式中添加括号和指数,以便用户可以(1 + 2) / 3 ^ 5输入例如.虽然我相当确定只有数字和运算符不可能有任何漏洞利用,但我不确定括号中的情况.
我知道只使用字符的组合,! [ ] + ( )您可以创建一个完全可执行的JavaScript程序.我也尝试在Google中搜索"javascript exploit characters"和各种组合,但这并不是一件容易找到的事情.
我的具体问题是,是否可以使用0-9 . + - / * ( ) ^(允许空格字符)编写任意javascript程序?由于它有点开放,如果几天后没有提供例子,我很好地结束这个问题.
我没有实现也没有使用解析器来执行此操作.这与这个问题无关
And*_*Ray -1
问题的答案是否定的,不可能使用给定的输入(包括括号)创建任意程序。为了创建程序,您必须能够创建字符串。您可以得到的最接近的限制是,NaN但是Infinity,在不允许引号或大括号的情况下,不可能将其中任何一个强制转换为字符串。
tl;dr 你被阻止了,因为你不能制作字符串。