-{toString:[].join,length:1,0:'javascript:alert(123)',valueOf:location}(c) http://www.freebuf.com/articl...
1 回答

开心每一天1111
TA贡献1836条经验 获得超13个赞
你的文章写的很清楚了,多理解理解吧。另外这是老IE的BUG,其他浏览器没这个BUG,不用太纠结。
接着说下原理吧。
首先你要理解,+和-会把后面的表达式转换为数字,如果后面是一个对象,则调用对象的valueOf方法,如果valueOf方法的值或者返回值不是一个数字,则调用toString方法作为返回值(如果这个返回值是数字或者可以转成数字的字符串,结果就是数字,否则是NaN)。一般的浏览器到这也就结束了。
如文章里面所讲,在含有缺陷的IE里面,得到这个返回值后,他还会去把这个返回值传给valueOf的内容去调用,这里valueOf的内容就是location,所以实际的调用就和上图一样。而这种调用居然能执行,确实是BUG,不过这是IE,看开点就好。
题外话:好久没打开过这玩意儿了。。。
添加回答
举报
0/150
提交
取消