攻擊者會誘使使用者的網頁瀏覽器在已經登入的可信網站上,透過利用瀏覽器會自動附帶相關 cookie的特性,讓攻擊者可以偽造請求,代表使用者透過瀏覽器提交未經授權的操作。
攻擊者的網站可能包含 HTML 表單或 JavaScript 程式碼,目的是向目標網頁應用程式發送請求。
原理:
- 攻擊者已經知道網頁應用程式執行特定操作所需的請求格式後,將惡意連結發送給使用者。
- 受害者的網站身份驗證通常是透過自動傳送的 cookie 進行驗證,當受害者點擊攻擊者分享的連結時,請求就會被發送。
- 因為安全措施不足,網頁應用程式無法分辨是真正的使用者請求還是偽造的請求。
可能的影響
雖然 CSRF 不會直接洩露使用者資料,但仍可能會發生更改密碼與電子郵件地址,或執行金融交易等未經授權的操作,因此還是有一定的危險性在。
類型
- 傳統CSRF
- 通常集中在透過提交表單執行會改變狀態的動作。
- 受害者在不知情的情況下被誘導提交表單,相關資料(如 cookie)會被自動帶上。
- 受害者的瀏覽器會向受害者已驗證的 Web 應用程式表單發送 HTTP 請求。
- 這些表單可能用來轉帳、修改帳戶資訊或變更電子郵件地址。
- 非同步CSRF
- 可在沒有完整頁面請求‑回應循環的情況下啟動操作。
- 這類攻擊使用非同步呼叫取代傳統的表單提交。
- 在近代線上應用中很常見,因為大部分都使用非同步伺服器通訊(透過 XMLHttpRequest 或 Fetch API)與 JavaScript。
防禦方法
- CSRF 測試
- 主動測試應用程式是否存在 CSRF 漏洞,嘗試發送未經授權的請求,並評估目前已部署的防護措施是否有效。
- 邊界驗證檢查
- 評估應用是否有妥善的使用者輸入驗證機制,確認是否存在 反 CSRF 欄位,且伺服器能正確驗證這些欄位。
- 安全標頭分析
- 檢查是否設置了關鍵的 HTTP 安全標頭,評估其有效性以防止 CSRF 及其他攻擊向量。
- 會話管理測試
- 測試應用的會話管理系統,確認Session Token是否以安全方式產生、傳輸與驗證,以防止未經授權的存取與操作。