資訊安全--CSRF


Posted by chihyu on 2021-01-25

CSRF Cross Site Request Forgery:跨站請求偽造
在不同 domain 底下,偽造成使用者本人發出 request

發 request 時,瀏覽器會把關聯的 cookie 帶上,如果在沒有登出的情況下點到惡意連結,可能就會在自己不知情的形況下發送 request,並把 cookie 帶過去

防禦方法--Server

核心:從 Server 防禦,擋掉從不同 domain 來的 request

檢查 Referer

執行:檢查 header 帶的 referer 是不是合法的 domain
注意:

  • 有些瀏覽器不會帶 referer
  • 使用者可以關閉自動帶 referer 的功能
  • 驗證 domain 是否合法的 function 可能有 bug

圖形驗證、簡訊驗證

執行:接收簡訊驗證碼,可以確保不被 CSRF 攻擊
注意:驗證碼過於繁複,會影響到使用者的體驗

CSRF token

執行:由 server 自動產生 csrftoken,把 csrftoken 隱藏在 form 裡面,並存在 server 的 session 裡
注意:server 若支持 cross origin,攻擊者就可以拿到 csrftoken

Double Submit Cookie

Sever side

執行:由 server 自動產生 csrftoken,把 csrftoken 隱藏在 form 裡,並設置在 client 端的 cookie 裡
注意:攻擊者若掌握 subdoamin 就可以改寫 cookie

Client side

執行:由 client 生成 csrftoeken,一樣把 csrftoken 放在 form 裡面,並設置 cookie

防禦方法--browser

same site cookie

執行:在設置 cookie 的後面加上 SameSite,瀏覽器驗證是否從同一個 site 發出的 request,如果不是就不會帶上 Cookie

Set-Cookie: session_id=elkjl1231kj; SameSite

可以針對要特定行為對 cookie 做 same site 的設定
ex. 購物或轉帳時才執行 same site,其餘就不用,可以讓使用者體驗更好一點

參考資料:讓我們來談談 CSRF


#Web #csrf #資訊安全







Related Posts

Command Line

Command Line

TechBridge Weekly 謝幕感想

TechBridge Weekly 謝幕感想

筆記、[JS101] 語法

筆記、[JS101] 語法


Comments