浏览器安全
同源策略SOP(Same Origin Policy)
浏览器的同源策略,限制了来自不同源的"Document"或脚本,对当前"Document"读取或设置某些属性
<script> <img> <iframe> <link> 可以跨域加载资源,不受同源策略的影响。这些带"src"属性的标签每次加载时,实际上是又浏览器发送了一次GET请求。不同于XMLHttpRequest的是。通过src属性加载的资源,浏览器限制了JavaScript的权限,使其不能读、写返回的内容
对于XMLHttpRequest来说,它可以访问来自同源的内容。但XMLHttpRequest收到同源策略的约束,不同跨服访问资源。
1 <html> 2 <head> 3 <script type="text/javascript"> 4 var xmlhttp; 5 function loadXMLDoc(url) 6 { 7 xmlhttp=null; 8 if(window.XMLHttpRequest) //XMLHttpRequest-来实现发送和接收HTTP请求与响应信息 9 { 10 xmlhttp=new XMLHttpRequest(); 11 } 12 else if (window.ActiveXObject) //启用并返回 Automation对象的引用 13 { 14 xmlhttp=new Activation("Microsoft.XMLHTTP"); 15 } 16 if (xmlhttp!=null) 17 { 18 xmlhttp.onreadystatechange=state_Change; 19 xmlhttp.open("GET",url,true); 20 xmlhttp.send(null); 21 } 22 else 23 { 24 alert("Your browser doex not support XMLHTTP."); 25 } 26 } 27 function state_Change() 28 { 29 if(xmlhttp.readyState==4) 30 { 31 if(xmlhttp.status==200) 32 { 33 document.getElementById('T1').innerHTML=xmlhttp.responseText; 34 } 35 else 36 { 37 alert("Problem retriveing data:"+xmlhttp.statusText); 38 } 39 } 40 } 41 </script> 42 </head> 43 <body onload="loadXMLDoc('/example/xdom/test_xmlhttp.txt')"> 44 <div id="T1" style="border:1px solid black;height: 40;width: 300;padding: 5"></div> 45 <br /> 46 <button onclick="loadXMLDoc('/example/xdom/text_xmlhttp2.txt')">Click</button> 47 </body> 48 </html>
XMLHttpRequest跨越访问标准。
通过目标域返回的Http头来授权是否允许跨服访问
假设从
http://www.a.com/test.html
发起一个跨域的XMLHttpRequest请求到
http://www.b.com/test.php
,发起的请求HTTP投必须带上
Origin
,而B站点服务器返回一个HTTP头包含
Access-Control-Allow-Origin: http://www.a.com
,那么这个请求就会被通过
浏览器沙盒
将浏览器的各个功能模块分开,各个浏览器实例分开,当一个进程奔溃时,也不会影响到其他的进程。
Chrome是第一个采用多进程架构的浏览器,主要进程分为:浏览器进程、渲染进程、插件进程、扩展进程。
渲染引擎由沙盒隔离, 网页代码要与浏览器内核进程、操作系统通信,需要通过IPC channel,在其中会进行一些安全检查。这可以让不受信任的网页或JavaScript代码运行在一个受限的环境中,保护本地系统的安全。
Chrome的Sandbox结构
Chrome每个标签页和扩展都在独立的沙盒内运行,在提高安全性的同时,一个标签页面的崩溃也不会导致其他标签页面被关闭,但由于过于占用内存,现在已经变成有些网页公用一个进程,它们和服务器保持共同的会话。
恶意网站拦截
恶意网站拦截的工作原理:浏览器周期性地从服务器获取一份最新的恶意网址黑名单,如果访问的网址存在于此黑名单中,浏览器就会弹出警告
恶意网站分类:
挂马网站
钓鱼网站
Content Security Policy(CSP)
Firefox4推出Content Security Policy(CSP),后来被其他浏览器支持。
CSP的做法是,由服务器端返回一个Content-Security-Policy的HTTP头,在其中描述页面应该遵守的安全策略,让浏览器不再盲目信任服务器发送的所有内容,并且能让浏览器只执行或者渲染来自这些源的内容。
CSP的做法是,由服务器端返回一个Content-Security-Policy的HTTP头,在其中描述页面应该遵守的安全策略,让浏览器不再盲目信任服务器发送的所有内容,并且能让浏览器只执行或者渲染来自这些源的内容。
使用CSP的方法就是插入一个HTTP返回头
Content-Security-Policy:policy
Content-Security-Policy:allow 'self' *.mydomain.com