同源策略
同源策略/SOP是一种约定,它是浏览器最核心也最基本的安全功能,所谓同源是指"协议+域名+端口"三者相同。
同源策略限制以下几种行为:
1、Cookie、LocalStorage 和 IndexDB 无法读取
2、DOM 和 Js对象无法获得
3、AJAX 请求不能发送
跨域解决方案
- jsonp跨域
- 跨域资源共享(CORS)
jsonp
浏览器不会拦截调用外部静态文件请求,也就是src属性,但jsonp只能以GET方式请求。
function info(result)
{
alert(result);
}
<script src="http://www.xx.com/jsonp.php?callback=info">
jsonp安全
一般是以jsonp方式传输敏感信息,可劫持此敏感信息导致敏感信息泄露。
如:联通某站jsonp接口返回用户套餐信息
QQ的JSONP接口返回用户相关信息
漏洞查找方式
在抓包或爬虫抓取jsonp接口,查看是否返回敏感信息,接口是否做了响应的校检。
修复方案
1、尽量避免跨域的数据传输,对于同域的数据传输使用xmlhttp的方式作为数据获取的方式,依赖于javascript在浏览器域里的安全性保护数据。
2、referer的来源限制,利用前端referer的不可伪造性来保障请求数据的应用来源于可信的地方,此种方式力度较稀,完全依赖于referer,某些情况下(如存在xss)可能导致被绕过。
3、token的加入,严格来说,这种利用javascript hijacking的方式获取数据是CSRF的一种,不过较之传统的CSRF不能获取数据只能提交而言,这种方式利用javascript可以获取一些敏感信息而已。如果我们能让攻击者对接口未知,就可以实现json hijacking的防御了。利用token对调用者的身份进行认证,这种方式对于调用者的身份会要求力度较细,但是一旦出现xss也可能导致前端Token的泄露,从而导致保护失效。
4、对于同域的json使用情况下,可以在数据的输出头部加入while(1);的方式避免数据被script标签的方式引用,这可以防止一些比较有特性的浏览器里导致的数据泄漏。
5、使用CORS代替jsonp
6、不要在使用cookie的情况下使用jsonp交换数据