跳至內容

網路應用程式安全指南/跨站點請求偽造 (CSRF)

來自華夏公益教科書,開放的世界,開放的書籍

跨站點請求偽造 (CSRF)

如果第三方網站導致已登入使用者的瀏覽器向您的服務發出請求,就會發生跨站點請求偽造。對於 GET 表單,這可以透過使用 IFRAME 或 IMG 標籤來實現。對於 POST 表單,這可以透過使用表單元素來實現,該元素的 action 屬性指向您的網站,可能使用 JavaScript 提交。這兩種方法都不需要使用者互動。瀏覽器會自動提交使用者的會話 cookie。這可以允許攻擊者以已登入使用者的許可權觸發不需要的操作。

為防止這種型別的攻擊

  • 包含一個隱藏的表單欄位,該欄位包含與使用者會話繫結的隨機令牌(最好是執行的操作),並在響應中檢查此令牌
  • 確保令牌不可預測且攻擊者無法獲得
    • 不要將其包含在攻擊者可以使用<script>標籤載入到其網站中的檔案中
  • Referer 檢查不安全,但可以用作附加措施

基本原理

CSRF 攻擊允許攻擊者濫用現有使用者會話。Web 瀏覽器的同源策略阻止攻擊網站讀取目標網站的內容(以及令牌)。由於令牌繫結到會話,因此攻擊者無法透過簡單地訪問網站來獲取令牌。令牌需要不可預測(安全隨機性),否則攻擊者只需猜測即可獲得令牌。

Referer 檢查不可靠,因為某些使用者代理不傳送該標頭,而某些個人防火牆出於隱私原因過濾或偽造該標頭。此外,攻擊者可以避免傳送 Referer,例如(在 IE8 和 Firefox 6 上測試)透過使用 JavaScript 設定 window.location。

華夏公益教科書