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