刷知乎看到一个特地有意思的话题:JavaScript 有什么奇技淫巧?[1]
看到一个让我开眼界的答复,分享给大家,以下是注释:
js 是一门弱小的语言。对黑客来说,这是绕过 WAF 的利器,比方当字母和数字都无被 WAF 屏蔽的时候,你能够这样玩:
1 = !+[] = ++[[]][+[]]
2 = !+[]+!+[] = ++[++[[]][+[]]][+[]]
3 = !+[]+!+[]+!+[] = ++[++[++[[]][+[]]][+[]]][+[]]
而
a 的获取形式 false[1]
或者是 NaN[1]
false = ([![]]+[])
// 空的 array, NOT 一下,加上中括号后再通过 +[] 转化成 string
1 = ++[[]][+[]]
// 后面解释过了,或者用!+[] 也能够。
于是 a 能够用这个表白:([![]]+[]) [++[[]][+[]]]
同理 l 的是 false[2],等于 ([![]]+[])[++[++[[]][+ []]][+[]]]
e 是 false[4],r 和 t 通过 true 来取得,而 true 就是 false 去掉 NOT 符号的后果
最初 alert 也就是这个:
(+[][+[]]+[])[++[[]][+[]]]+([![]]+ [])[++[++[[]][+[]]][+[]]]+([!![]]+ [])[++[++[++[[]][+[]]][+[]]][+[]]]+ ([!![]]+[])[++[[]][+[]]]+([!![]]+ [])[+[]]
还有一些比较复杂的字母须要绕一下,比如说 window 对象 的结构:
(1,[].sort)() = window
sort 的 s 通过 false, r t 通过 true, o 通过 [object Object]
于是 window.alert(1) 就是如下代码:
([],[][([![]]+[])[++[++[++[[]][+[]]][+[]]] [+[]]]+([]+{})[++[[]][+[]]]+([!![]]+[])[++ [[]][+[]]]+([!![]]+[])[+[]]])()[ (+[][+[]] +[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+ []]][+[]]] +([!![]]+[])[++[++[++[[]][+[]]] [+[]]][+[]]]+([!![]]+[])[++ [[]][+[]]]+ ([!![]]+[])[+[]]](++[[]][+[]] "],[][([![]]+[])[++[++[++[[]][+[]]][+[]]] [+[]]]+([]+{})[++[[]][+[]]]+([!![]]+[])[++ [[]][+[]]]+([!![]]+[])[+[]]])()[ (+[][+[]] +[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+ []]][+[]]] +([!![]]+[])[++[++[++[[]][+[]]] [+[]]][+[]]]+([!![]]+[])[++ [[]][+[]]]+ ([!![]]+[])[+[]]")
“
作者:Roy Li 链接:https://www.zhihu.com/questio…
”
最初再举荐一个有意思的网站,http://www.jsfuck.com/,见识更多奇奇怪怪无用的常识。
看完这篇文章有没有感觉本人涨常识了,有的话点赞、转发、在看 一键三连!