这篇文章负责解决一次面试题:
简单的说一下同源策略
说说cors 和 jsonp分别是干什么的 为什么会出现这两个漏洞,以及如何进行修复
cors 和 jsonp 在修复过程中 token 是如何传递token的
cors如果是不允许的域发起了请求,cors会进行怎样的返回
jsonp的token跟在哪个位置
jsonp referr校验能否百分百防护吗
同源策略
同源策略限制了不同源之间如何进行资源交互,是用于隔离潜在恶意文件的重要安全机制。
(emmmm其实刚学的时候纠结了好久这个东西)
定义
协议/主机/端口
与http://store.company.com/dir/page.html
进行比较:
URL | 结果 | 原因 |
---|---|---|
http://store.company.com/dir2/other.html |
同源 | 只有路径不同 |
http://store.company.com/dir/inner/another.html |
同源 | 只有路径不同 |
https://store.company.com/secure.html |
失败 | 协议不同 |
http://store.company.com:81/dir/etc.html |
失败 | 端口不同 ( http:// 默认端口是80) |
http://news.company.com/dir/other.html |
失败 | 主机不同 |
JSONP
由于同源策略的存在,从别的域名(网站)那获取资料需要一个特殊的技术,即Jsonp(JSON with Padding)。Jsonp是 json 的一种"使用模式",用于跨域读取数据。
简单的说,就是动态创建<script>
标签,然后利用<script>
的src 不受同源策略约束来跨域获取数据。
JSON劫持
JSON Hijacking,属于 CSRF( Cross-site request forgery 跨站请求伪造)的范畴里。
比如下面的链接在已登录的情况下会返回json格式的用户信息:
http://login.xxx.com/userinfo
问题在于,攻击者伪造了一个虚假页面,并加入了如下标签:
<script src="http://login.xxx.com/userinfo"></script>
如果当前浏览器已经登录了test.com,并且cookie未过期,然后访问了攻击者的虚假页面,那么该页面就可以拿到json形式的用户敏感信息。
又因为script标签会自动解析json数据,生成对应的js对象,然后再通过
Object.prototype.__defineSetter__
来触发自己的恶意代码……
所以这个函数在当前的chrome和firefox中都失效了。