扫码关注官方订阅号
-{toString:[].join,length:1,0:'javascript:alert(123)',valueOf:location}
(c) http://www.freebuf.com/articl...
学习是最好的投资!
你的文章写的很清楚了,多理解理解吧。另外这是老IE的BUG,其他浏览器没这个BUG,不用太纠结。
接着说下原理吧。
你这个和下面这个等价:
首先你要理解,+和-会把后面的表达式转换为数字,如果后面是一个对象,则调用对象的valueOf方法,如果valueOf方法的值或者返回值不是一个数字,则调用toString方法作为返回值(如果这个返回值是数字或者可以转成数字的字符串,结果就是数字,否则是NaN)。一般的浏览器到这也就结束了。
如文章里面所讲,在含有缺陷的IE里面,得到这个返回值后,他还会去把这个返回值传给valueOf的内容去调用,这里valueOf的内容就是location,所以实际的调用就和上图一样。而这种调用居然能执行,确实是BUG,不过这是IE,看开点就好。
题外话:好久没打开过这玩意儿了。。。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
你的文章写的很清楚了,多理解理解吧。另外这是老IE的BUG,其他浏览器没这个BUG,不用太纠结。
接着说下原理吧。
你这个和下面这个等价:
首先你要理解,+和-会把后面的表达式转换为数字,如果后面是一个对象,则调用对象的valueOf方法,如果valueOf方法的值或者返回值不是一个数字,则调用toString方法作为返回值(如果这个返回值是数字或者可以转成数字的字符串,结果就是数字,否则是NaN)。一般的浏览器到这也就结束了。
如文章里面所讲,在含有缺陷的IE里面,得到这个返回值后,他还会去把这个返回值传给valueOf的内容去调用,这里valueOf的内容就是location,所以实际的调用就和上图一样。而这种调用居然能执行,确实是BUG,不过这是IE,看开点就好。
题外话:好久没打开过这玩意儿了。。。