浏览器安全以同源策略为基础,理解同源策略才能把握客户端安全本质
web是建立在同源策略之上的,浏览器只是针对同源策略的一种实现
同源策略
浏览器的同源策略,限制了来自不同源的“document”和脚本
判断资源是否同源,以下情况认为同源、非同源:
URL | outcome | reason |
http://store.company.com/dir/a.html | 同源 | |
http://store.company.com/dir/b.html | 同源 | |
http://store.company.com:8080/dir/a.html | 非 | 端口号 |
https://store.company.com/dir/a.html | 非 | 协议 |
http://news.company.com/dir/a.html | 非 | 域名(ip) |
影响“源”的因素:host(域名、IP),端口,协议
特别注意:
在a.com中执行如下代码
<script src="http://b.com/b.js"></script>
试问,b.js的源是谁?答案是a.com
虽然从b.com中加载了b.js,但是b.js是在a.com中运行的,因此对当前打开的界面(a.com),b.js的源是a.com
带src属性的标签的同源策略
<script>、<img>、<iframe>、<link>等标签带有src属性,可以跨域加载资源,不受同源策略限制
这些标签加载时,实际上是浏览器发起了一个GET请求
不同于XMLHttpRequest,通过src加载资源的标签,浏览器限制了JavaScript的权限,使其不能读、写返回的内容
比如,通过CDN加载jQuery,就无法读写其返回的内容
XMLHttpRequest对象的同源策略
XMLHttpRequest对象不能跨域访问资源,因此在ajax开发中要注意跨域问题
但是近年W3C制定了XMLHttpRequest对象跨域访问的标准:
通过目标域返回的HTTP头来授权是否允许跨域访问【这个跨域访问方案的基础是:JavaScript无法控制HTTP头】
浏览器沙箱模型(SandBox)
“挂马” :在网页中插入一段恶意代码,利用浏览器漏洞执行代码的攻击方式
Chrome是第一个采取多进程架构的浏览器(不是多线程,是多进程);多进程架构讲浏览器各个功能模块分开,各个浏览器实例分开,当一个进程崩溃时,不会影响到其他的进程
Chrome主要进程分为:浏览器进程,渲染进程,插件进程,扩展进程。插件进程如:flash,java,pdf等与浏览器进程严格隔离
SandBox 即沙箱,SandBox泛指“资源隔离模块”
恶意网址拦截
工作原理:浏览器周期性的从服务器端获取一份最新的恶意网址的黑名单,如果用户上网的网址在此名单中,浏览器给出警告
恶意网站分类:
- 挂马网站 ,网页中包含的恶意脚本对用户进行攻击
- 钓鱼网站, 模仿知名网站界面
PhishTank 是免费提供恶意网址黑名单的组织,名单由各地志愿者提供,更新频繁