看得我目瞪口呆的 JavaScript 奇淫技巧
刷知乎看到一個(gè)特別有意思的話題:JavaScript 有什么奇技淫巧?[1]
看到一個(gè)讓我開(kāi)眼界的回答,分享給大家,以下是正文:
js 是一門強(qiáng)大的語(yǔ)言。對(duì)黑客來(lái)說(shuō),這是繞過(guò) WAF 的利器,比如當(dāng)字母和數(shù)字都無(wú)被 WAF 屏蔽的時(shí)候,你可以這樣玩:
1 = !+[] = ++[[]][+[]]
2 = !+[]+!+[] = ++[++[[]][+[]]][+[]]
3 = !+[]+!+[]+!+[] = ++[++[++[[]][+[]]][+[]]][+[]]

而
a 的獲取方式 false[1] 或者是 NaN[1]
false = ([![]]+[])
// 空的 array, NOT 一下,加上中括號(hào)后再通過(guò)+[] 轉(zhuǎn)化成 string
1 = ++[[]][+[]]
//前面解釋過(guò)了,或者用!+[] 也可以。
于是 a 可以用這個(gè)表達(dá):([![]]+[]) [++[[]][+[]]]
同理 l 的是 false[2], 等于 ([![]]+[])[++[++[[]][+ []]][+[]]]

e 是 false[4], r 和 t 通過(guò) true 來(lái)獲得,而 true 就是 false 去掉 NOT 符號(hào)的結(jié)果
最后 alert 也就是這個(gè):
(+[][+[]]+[])[++[[]][+[]]]+([![]]+ [])[++[++[[]][+[]]][+[]]]+([!![]]+ [])[++[++[++[[]][+[]]][+[]]][+[]]]+ ([!![]]+[])[++[[]][+[]]]+([!![]]+ [])[+[]]

還有一些比較復(fù)雜的字母需要繞一下,比如說(shuō) window 對(duì)象 的構(gòu)造:
(1,[].sort)() = window
sort 的 s 通過(guò) false, r t 通過(guò) true, o 通過(guò) [object Object]
于是 window.alert(1) 就是如下代碼:
([],[][([![]]+[])[++[++[++[[]][+[]]][+[]]] [+[]]]+([]+{})[++[[]][+[]]]+([!![]]+[])[++ [[]][+[]]]+([!![]]+[])[+[]]])()[ (+[][+[]] +[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+ []]][+[]]] +([!![]]+[])[++[++[++[[]][+[]]] [+[]]][+[]]]+([!![]]+[])[++ [[]][+[]]]+ ([!![]]+[])[+[]]](++[[]][+[]] "],[][([![]]+[])[++[++[++[[]][+[]]][+[]]] [+[]]]+([]+{})[++[[]][+[]]]+([!![]]+[])[++ [[]][+[]]]+([!![]]+[])[+[]]])()[ (+[][+[]] +[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+ []]][+[]]] +([!![]]+[])[++[++[++[[]][+[]]] [+[]]][+[]]]+([!![]]+[])[++ [[]][+[]]]+ ([!![]]+[])[+[]]")“作者:Roy Li 鏈接:https://www.zhihu.com/question/27428135/answer/36802082
”
最后再推薦一個(gè)有意思的網(wǎng)站,http://www.jsfuck.com/,見(jiàn)識(shí)更多奇奇怪怪無(wú)用的知識(shí)。
看完這篇文章有沒(méi)有覺(jué)得自己漲知識(shí)了,有的話點(diǎn)贊、轉(zhuǎn)發(fā)、在看 一鍵三連!
參考資料
JavaScript 有什么奇技淫巧?: https://www.zhihu.com/question/27428135/answer/36802082
