CORS漏洞其中已经存在好久了,可是国内了解的人不是不少,文章更是少只有少,漏洞平台也没有此分类。javascript
在DefConChina以后写了一篇算是小科普的文章。html
定义
CORS,Cross-Origin Resource Sharing,跨源资源共享。
CORS是W3C出的一个标准,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通。由于开发者须要进行跨域进行获取资源,应用场景,在a.com,想获取b.com中的数据,经常使用的2种方法进行跨域
一种为JSONP,一种为CORS.前者再次不在描述,常见的为JSONP劫持。java
CORS请求示例:
b.com想获取www.a.com/1.jpg的图片资源。
代码以下:nginx
<!DOCTYPE html> <html> <head>CORS Test</head> <body> <div id="img_Div"></div> <script type="text/javascript"> //XmlHttpRequest对象 function createXmlHttpRequest(){ if(window.ActiveXObject){ //若是是IE浏览器 return new ActiveXObject("Microsoft.XMLHTTP"); }else if(window.XMLHttpRequest){ //非IE浏览器 return new XMLHttpRequest(); } } function getFile() { var img_Container = document.getElementById("img_Div"); var xhr = createXmlHttpRequest(); xhr.open('GET', 'http://oss.youkouyang.com/1.jpg', true); xhr.setRequestHeader('Content-Type', 'image/jpeg'); xhr.responseType = "blob"; xhr.onload = function() { if (this.status == 200) { var blob = this.response; var img = document.createElement("img"); img.onload = function(e) { window.URL.revokeObjectURL(img.src); }; img.src = window.URL.createObjectURL(blob); img_Container.appendChild(img); } } xhr.send(null); } </script> <div class="row"> <input type="button" onclick="getFile()" value="Get" /> </div> </body> </html>
CORS安全机制
在CORS中,相关的标准和浏览器厂商也推出了不少防范的相关标准。例如SOP等等。git
简单请求github
在简单请求中,若是请求符合2个标准,则会进行异步请求:
1,GET、POST、HEAD..
2,Content-Type验证,pplication/x-www-form-urlencoded;multipart/form-data;text/plain跨域
在简单请求中,浏览器进行跨域请求,会在请求中携带Origin,表面这是一个跨域。服务端会在接收中,经过本身的跨域规则进行验证。
经过access-Control-Allow-Origin和Access-Control-Allow-Methods 若是验证成功,则会返回资源内容,若是验证失败,则返回403状态。浏览器
预先请求
在请求中,知足下面任意一个请求中,浏览器会首先发出OPTION请求,再去验证是否符合。安全
在OWASP TOP 10中也有更详细的说明:
http://blog.securelayer7.net/owasp-top-10-security-misconfiguration-5-cors-vulnerability-patch/
在DefConChina中,陈建军分享的议题中解释的更清楚,有意向的能够找PPT或者视频服务器
实战请求COS以前发过一次CORS的蠕虫:
http://evilcos.me/?p=590
防护:
在防护过程当中,存在不少配置不当,或者配置错误的状况,例如使用*,或者使用多个域名list,或者使用null,或者nginx配置规则存在错误等等。
相关工具:
CORScanner // github
参考:
https://blog.csdn.net/saytime/article/details/51549888