为了账号安全,请及时绑定邮箱和手机立即绑定

这个代码为什么会弹出警告框?

这个代码为什么会弹出警告框?

绝地无双 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条经验 获得超13个赞

你的文章写的很清楚了,多理解理解吧。另外这是老IE的BUG,其他浏览器没这个BUG,不用太纠结。

接着说下原理吧。

首先你要理解,+和-会把后面的表达式转换为数字,如果后面是一个对象,则调用对象的valueOf方法,如果valueOf方法的值或者返回值不是一个数字,则调用toString方法作为返回值(如果这个返回值是数字或者可以转成数字的字符串,结果就是数字,否则是NaN)。一般的浏览器到这也就结束了。

如文章里面所讲,在含有缺陷的IE里面,得到这个返回值后,他还会去把这个返回值传给valueOf的内容去调用,这里valueOf的内容就是location,所以实际的调用就和上图一样。而这种调用居然能执行,确实是BUG,不过这是IE,看开点就好。

题外话:好久没打开过这玩意儿了。。。


查看完整回答
反对 回复 2018-10-16
  • 1 回答
  • 0 关注
  • 718 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号