我有兴趣了解其内部结构JavaScript。我尝试阅读源代码蜘蛛猴 and Rhino但这是相当复杂的。
我问的原因是:为什么会发生类似的事情
-
(![]+[])[+!![]+[]]
生产"a"
-
(Å=[],[µ=!Å+Å][µ[È=++Å+Å+Å]+({}+Å)[Ç=!!Å+µ,ª=Ç[Å]+Ç[+!Å],Å]+ª])()[µ[Å]+µ[Å+Å]+Ç[È]+ª](Å)
生产alert(1)
?
Source: http://sla.ckers.org/forum/read.php?24,32930,page=1.
该论坛上还有很多 JavaScript 怪异的例子,我想从编程的角度了解它在 Web 应用程序安全方面的工作原理。
如果你想理解为什么这些奇怪的表达式会这样工作,你可以打开 firebug 控制台并自己进行实验。我做到了,我明白了![]
is false
, !![]
is true
,将数组添加到布尔值(false+[]
or true+[]
) 生成该值的字符串版本 (false+[]="false"
).
这样表达式就可以归结为:
"false"["1"]
这显然是“a”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)