CSRF (Cross-Site Request Forgery) là gì? Cách phòng chống?
CSRF (Cross-Site Request Forgery) exploit việc browser tự động gửi cookies khi request đến domain — attacker tạo form/image trên evil.com gửi request đến bank.com, browser tự động attach session cookie của user.
Ví dụ: <img src='https://bank.com/transfer?to=attacker&amount=1000'> — nếu user đang logged in và bank không có CSRF protection, transfer xảy ra.
Phòng chống: SameSite cookie attribute là defense chính hiện nay — SameSite=Strict: cookie không gửi trong bất kỳ cross-site request nào (bao gồm link navigation); SameSite=Lax (default Chrome): cookie gửi trong top-level GET navigation nhưng không trong POST/iframe/img — đủ cho hầu hết cases; SameSite=None: phải có Secure, gửi trong tất cả cross-site requests.
CSRF tokens: random token lưu trong session, include trong form hidden field và verify server-side — attacker không thể đọc token vì same-origin policy.
Double Submit Cookie: gửi token trong cả cookie và request body/header — server verify chúng match; không cần server-side state.
Custom request headers (AJAX): XMLHttpRequest và fetch không thể set custom headers cross-origin mà không qua CORS preflight — thêm X-Requested-With: XMLHttpRequest hoặc Content-Type: application/json tự nhiên ngăn CSRF vì attacker không thể tạo cross-origin request với custom headers.
Origin header checking: verify Origin/Referer header match expected domain — không đủ một mình vì có thể bị spoof trong một số cases.
Xem toàn bộ Bảo Mật cùng filter theo level & chủ đề con.