搜索

首页  >  问答  >  正文

javascript - js代码中的top[_$[0]][_$[1]]=_$[2];为什么可以直接执行?

在一个盗号的钓鱼网站上看到这么几行代码,执行后会将网页重定向:

var _$=["\x6c\x6f\x63\x61\x74\x69\x6f\x6e","\x68\x72\x65\x66","\x68\x74\x74\x70\x3a\x2f\x2f\x75\x73\x65\x72\x2e\x71\x7a\x6f\x6e\x65\x2e\x71\x71\x2e\x63\x6f\x6d\x2f\x34\x30\x33\x33\x38\x32\x30\x33\x31\x2f\x34"];

top[_$[0]][_$[1]]=_$[2];

变量转义的结果为

["location", "href", "http://user.qzone.qq.com/xxxxxxxx/4"]

为什么用一个top的多维数组可以将代码等价于

location.href = "http://user.qzone.qq.com/xxxxxxxx/4"
PHP中文网PHP中文网2843 天前878

全部回复(3)我来回复

  • 大家讲道理

    大家讲道理2017-04-10 15:38:31

    你的理解有误:这里不是多维数组,而是对象属性的方括号表示法(bracket notation), bracket notation 比 dot notation 强大的地方在于可以使用表达式表示属性,而 dot notation 是把属性名写死的。

    在浏览器对象模型中,top 对象表示最顶层的浏览器窗口

    top['location']['href'] = "http://user.qzone.qq.com/xxxxxxxx/4" 
    

    等价于

    top.location.href = "http://user.qzone.qq.com/xxxxxxxx/4"
    

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:38:31

    这里执行的是:window.top.location.href 赋值
    window[top][location][href] 赋值 对象的属性可以用[]访问

    回复
    0
  • PHP中文网

    PHP中文网2017-04-10 15:38:31

    @fighterleslie 正解

    回复
    0
  • 取消回复