CORS (跨域資源共享)的漏洞


跨域資源共享(CORS)漏洞詳解

瀏覽器同源策略

  • 同協議,同端口同域名
  • 不運行別的網站訪問該網站資源

兩種跨域方法

  1. JSONP跨域請求

    • 原理 https://www.cnblogs.com/znyu/p/6839617.html
    • jsonp利用script標簽具有跨域能力的特點,允許用戶通過script的src屬性向服務器發送請求,並傳遞一個函數名作為參數,服務端返回數據時會將這個callback函數作為函數名包裹住從服務端接收的json數據,客戶端會按照定義好的方式處理數據。舉例如下
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>JSONP 實例</title>
    </head>
    <body>
    <div id="list"></div>
    <script type="text/javascript">
    function callbackFunction(result, methodName) {
      var html = '<ul>';
      for(var i = 0; i < result.length; i++) {
        html += '<li>' + result[i] + '</li>';
      }
      html += '</ul>';
      document.getElementById('list').innerHTML = html;
    }
    </script>
    <script type="text/javascript" src="http://www.myweb.com/demo/jsonp.php?jsoncallback=callbackFunction"></script>
    </body>
    </html>
    
    • callbackFunction函數名作為參數傳遞給服務器,服務器返回數據形式為:callbackFunction(["list1","list2"]),顯示結果會按照 callbackFunction()函數來處理。
  2. CORS跨域請求

  • jsonp只能發送get請求的包

CORS的安全問題

  • 返回報文頭部的Access-Control-Allow-Origin根據請求報文Origin生成

  • 如果Access-Control-Allow-Origin可控,且Access-Control-Allow-Credentials為true, 那么就可以利用一個可控的網站來竊取一個人的個人隱私信息

  • 就可以請求一些敏感信息,請求用戶主頁等

CORS漏洞與CSRF漏洞

  • 相同點:
    • 都要借助第三方網站
    • 都有借助ajax的異步過程
    • 一般都要用戶登錄
  • 不同點
    • CORS可以讀取到受害者的敏感信息
    • CSRF可以完成一些如轉賬類的敏感caoz
    • 一般有CORS都會有CSRF

簡單的漏洞檢測方法

  • 修改一下Origin的頭
  • 過濾刪選

常見的漏洞點

  1. 互聯網廠商的api接口
  2. 聊天程序的的api接口
  3. app的api(不過有一 些請求需要帶有一 些額外的請求頭,利用起來比較困難)
  4. 區塊鏈廠商

● CORS的規范中還提到了"NULL"源。觸發這個源是為了網頁跳轉或者是來自本地HTML文件。目標應用可能會接收"null"源, 並且這個可能被測試者(或者攻擊者)利用,任何網站很容易使用沙盒iframe來獲取" null“源

防御

  1. 不要配置"Access-Control-Allow-Origin" 為通配符“*”,而且更重要的是,要嚴格效驗來自請求數據包中的"Origin" 的值。當收到跨域請求的時候,要檢查"Origin" 的值是否是一個可信的源, 還要檢查是否為null

  2. 避免使用"Access-Control-Allow-Credentials: true"

  3. 減少Access-Control- Allow-Methods所允許的方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM