Same Origin Policy同源策略是一种约定,是浏览器最核心也是最基本的安全功能,它是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript的浏览器都会使用这个策略。
为什么需要同源策略,这里举个例子:
假设现在没有同源策略,会发生什么事情呢?大家知道,JavaScript可以做很多东西,比如:读取/修改网页中某个值。你现在打开了浏览器,在一 个tab窗口中打开了银行网站,在另外一个tab窗口中打开了一个恶意网站,而那个恶意网站挂了一个的专门修改银行信息的JavaScript,当你访问 这个恶意网站并且执行它JavaScript时,你的银行页面就会被这个JavaScript修改,后果会非常严重!而同源策略就为了防止这种事情发生。
浏览器针对js提出了origin源这个概念,来自不同的origin对象无法相互干扰。所谓同源,就是指域名、协议、端口相同。假设JavaScript1和JavaScript3是属于百度的脚本,而 JavaScript2是属于谷歌的脚本,tab1只能执行JavaScript1和JavaScript3脚本,而不能执行JavaScript2,从而防止其他网页对本网页的非法篡改。
在浏览器中,<script>、<img>、<iframe>、<link>等标签都可以跨域或加载资源,而不受同源策略的限制,这些带"src"属性的标签每次加载时,实际上是由浏览器发起了一次get请求,不同于XMLHttpRequest的是,通过src属性加载时,浏览器限制了javascript的权限,使其不能读、写返回的内容。
对于<ajax>XMLHttpRequest它可以访问来自同源对象的内容,但受到同源策略的约束,不能跨域访问资源。
<现在有开放ajax对跨域请求的开放,请求目标或返回头信息授权是否可以跨域访问>除了dom、cookie、xmlHttpRequest会受到同源策略的限制外,对第三方插件也要有各自的同源策略,如Flash、java applet、silverlight、google gears等;
然而同源策略并非坚不可摧,同源策略也可被绕过;
<body>
<style>
@import url("http://192.168.0.251:8087/gz/jsp/public/main.jsp")
</style>
<script>
var t = document.body.currentStyle.fontFamily;
alert(t);
</script>
</body>
<script>仅能加载资源,不能读写内容,而这个漏洞能绕过同源策略,读取页面内容;
google chrome是第一个采取多进程架构的浏览器,主要进程:浏览器进程、渲染进程、插件进程、扩展进程;
浏览器沙箱sandbox
拦截恶意网站(挂马网站、钓鱼网站)