同源策略&CORS跨域漏洞&JSONP跨域漏洞

同源策略介绍

什么是同源策略?
同源策略是一种约定,它是浏览器最核心的也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能会受影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

同源策略,它是由Netscape提出的一个著名的安全策略。
当一个浏览器的两个tab页中分别打开来百度和谷歌的页面。
当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的。
即检查是否同源,只有和百度同源的脚本才会执行。
如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。
不同的客户端本在未授权的情况下,不能读写对方的资源,如DOM、Cookie,Session等资源
同源策略限制了只有同源的脚本才会被执行,当打开一个网站的时候,会首先检查是否有同源,如果非同源,在请求数据的时候,浏览器就会进行拦截报异常,拒绝访问。
不同源的客户端脚本在未授权的情况下,不能读写对方的资源,如DOM,JS,Cookie,Session等资源。

浏览器规定,提交表单不受同源策略的限制。
同源策略&CORS跨域漏洞&JSONP跨域漏洞
同源策略必须同时满足以下几个条件才会被称为是同源:
相同的协议:两个站点必须是使用同一种协议。
相同的域名:两个站点必须使用相同的域名。
相同的端口:两个站点必须使用相同的端口。

CORS跨域漏洞

什么是CORS跨域?
CORS即跨域资源共享,它是一种机制,web应用程序可以通过在HTTP中增加字段来告诉浏览器,哪些不同来源服务器是有权访问本站资源的,当不同域的请求发生时,就出现了跨域的现象。

CORS,跨域资源共享,它是为了弥补JSONP等跨域常见技术的缺陷,而提出的安全方便的跨域方案。它允许浏览器向跨域服务器,发出XMLHTTPRequest请求,从而克服AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持,相比JSONP更加复杂,但是一般目前的浏览器都是支持的,服务器只需要进行相应配置,其通信过程都是浏览器自动完成,对于开发人员来说,跟写AJAX的代码没有区别,只是会在发送跨域请求时在HTTP请求头中添加一些字段来验证。
为什么要跨域?
跨域本质就是绕过同源策略的严格限制,安全与实用往往有时候会有一定的矛盾性,开发人员更注重的是功能的开发使用,例如:有时候同二级域名下的不同三级域名需要进行一些信息数据传输时,共享一些资源时,同源策略将其限制,但是又要实现该功能,此时就诞生了一些跨域请求的技术。
CORS跨域漏洞
修复方式:
合理配置Access-Control-Allow-Origin头,不设置为*。
设置白名单去限制允许跨域的地址,如Access-Control-Allow-Origin:http://127.0.0.1(只允许127.0.0.1)。
配置Access-Control-Allow-Credentials,不要使用true,避免cookie被窃取。
配置Access-Control-Allow-Methods时,尽量减少使用的请求方式。
JSONP跨域漏洞
什么是JSONP?
Josonp是基于josonp格式的为解决跨域请求资源而产生的解决方案,它的基本原理是利用HTML的元素标签,远程调用JSON文件来实现数据传递JSONP可以绕过AJAX遵循的同源策略。jsnop只支持Get方式。

JSON是一种基于文本的轻量级的数据交换格式。

同源策略&CORS跨域漏洞&JSONP跨域漏洞
同源策略&CORS跨域漏洞&JSONP跨域漏洞
callback反射型XSS:
反射型XSS漏洞很简单,在Get请求中直接构造xss payload即可,可以用来挟持跳转到钓鱼站点或者盗取cookie信息。
callback函数安全修复建议

  • 严格定义Content-Type:application/json 这样的防御机制导致了浏览器不解析恶意插入的xss代码。
  • 过滤callback以及JSON数据输出 这样的防御机制是比较传统的攻防思维,对输出点进行xss过滤。

同源策略&CORS跨域漏洞&JSONP跨域漏洞
Jsonp跨域挟持修复建议:
验证Jsop文件调用的来源Refere
随机token

上一篇:4_5:CORS 跨域资源共享


下一篇:[AWS] Lab: Create a REST API with API Gateway and Lambda with CORS