前端中存在的变量劫持漏洞

2019年7月4日10:45:21 发表评论

前端中存在的变量劫持漏洞

0x1 基础知识

当页面存在iframe的时候,父页面和子页面是可以相互获取到对方的window对象的,主要利用下面的方法。
(本文不考虑 iframe 的 sandbox 属性,所有测试都是在不添加任何sandbox的限制下进行。)

父访问子:

1
2
3
document.getElementById("iframe1").contentWindow; // 获取iframe的window对象
window.frames[0]; // 获取iframe的window对象
window[0] ; // 这个比较有意思, window 是本页面的window对象,window[0] 是子页面的window对象

子访问父:

1
2
window.parent;  //获取上一级的window对象,如果还是iframe则是该iframe的window对象
window.top ;   // 获取最顶级容器的window对象,即,就是你打开页面的文档

如果父和子页面是同源的,那么可以通过这个window对象获取到任何你想获取的内容,包括但是不限于 document,name,location 等。但是在非同源的情况下,iframe的window对象大多数的属性都会被同源策略block掉,但是有两个属性比较特殊。

  1. frames 可读,但是不可写。 意味着可以读取不同域的子页面里面的iframe的window对象
  2. location 可写,但是不可读。意味着父子可以相互修改彼此的 location

发表评论

后发表评论