一、关于浏览器
对于Web应用来说,浏览器是最重要的客户端。
目前浏览器五花八门多得不得了,除了Chrome、IE、Firefox、Safari、Opera这些国外的浏览器外,百度、腾讯、360、淘宝、搜狗、傲游之类的,反正能做的都做了。
浏览器虽然这么多,但浏览器内核主要就以下4种:
Trident:IE使用的内核。
Gecko:Firefox使用的内核。
WebKit:Safair和Chrome使用的内核。WebKit由苹果发明,Chrome也用了,但是Google又开发了V8引擎替换掉了WebKit中的Javascript引擎。
Presto:Opera使用的内核。
国内的浏览器基本都是双核浏览器,使用基于WebKit的内核高速浏览常用网站,使用Trident内核兼容网银等网站。
二、同源策略
同源策略是浏览器最基本的安全策略,它认为任何站点的内容都是不安全的,所以当脚本运行时,只被允许访问来自同一站点的资源。
同源是指域名、协议、端口都相同。
1、同源策略的限制范围
(1)cookie,LocalStorage,和IndexDB 无法读取
(2)DOM 无法获得
(3)Ajax请求不能发送
2、没有同源策略限制的两大危险场景
- 没有同源策略限制的接口请求:
cookie一般用来处理登录场景,目的是让服务器知道谁发的这次请求。如果你请求接口进行登录,服务端验证通过后会在响应头加入 Set-Cookie 字段,然后下次再发请求的时候,浏览器会自动将cookie 附加在HTTP请求的头字段Cookie中,服务端就知道这个用户已经登录过了。问题也就来了,如果你登录一个银行网站A,然后又进入一个非法网站B,如果没有同源策略,那么非法网站就会获取你登录A 网站的Cookie,这样一来不发网站就可以登录你A网站的账号为所欲为。这就是传说中的 CSRF攻击。
- 没有同源策略限制的DOM查询:
最常见的就是钓鱼网站。 有一天你收到一封邮件,说你的银行账户有风险,干净登录www.yinghang.com 进行修改,你打开界面发现和你以前登录的网站一模一样,然后你输入账户和密码登陆后发现账户余额正常,就离开了。可是你平时登录银行账户的网站是www.yinhang.com。这个钓鱼网站就获取了账户和密码。
如果没有同源策略,就会发生下面这样的问题:
恶意网站用一个iframe把真实的银行登录页放到他的页面上,当用户使用用户名密码登录时,父页面的javascript就可以读取到银行登录页表单中的内容。
甚至浏览器的1个Tab页打开了恶意网站,另一个Tab页打开了银行网站,恶意网站中的javascript可以读取到银行网站的内容。这样银行卡和密码就能被轻易拿走。
三、跨域访问
由于同源策略的原因,浏览器对跨域访问做了很多限制,但有时我们的确需要做跨域访问,那要怎么办?主要有以下几种情况:
1、iframe的跨域访问
同域名下,父页面可以通过document.getElementById(‘_iframe’).contentWindow.document访问子页面的内容,但不同域名下会出现类似下面的错误:
Uncaught SecurityError: Blocked a frame with origin “http://a.com” from accessing a frame with origin “http://b.com”. Protocols, domains, and ports must match.
有两种解决方法&#