絕地無雙
2018-09-06 10:09:45
-{toString:[].join,length:1,0:'javascript:alert(123)',valueOf:location}(c) http://www.freebuf.com/articl...
1 回答

開心每一天1111
TA貢獻1836條經(jīng)驗 獲得超13個贊
你的文章寫的很清楚了,多理解理解吧。另外這是老IE的BUG,其他瀏覽器沒這個BUG,不用太糾結(jié)。
接著說下原理吧。
首先你要理解,+和-會把后面的表達式轉(zhuǎn)換為數(shù)字,如果后面是一個對象,則調(diào)用對象的valueOf方法,如果valueOf方法的值或者返回值不是一個數(shù)字,則調(diào)用toString方法作為返回值(如果這個返回值是數(shù)字或者可以轉(zhuǎn)成數(shù)字的字符串,結(jié)果就是數(shù)字,否則是NaN)。一般的瀏覽器到這也就結(jié)束了。
如文章里面所講,在含有缺陷的IE里面,得到這個返回值后,他還會去把這個返回值傳給valueOf的內(nèi)容去調(diào)用,這里valueOf的內(nèi)容就是location,所以實際的調(diào)用就和上圖一樣。而這種調(diào)用居然能執(zhí)行,確實是BUG,不過這是IE,看開點就好。
題外話:好久沒打開過這玩意兒了。。。
添加回答
舉報
0/150
提交
取消