Bảo mật Web không chỉ là mã hóa Server. Nó bắt đầu ngay tại Trình duyệt với những cơ chế nghiêm ngặt (Strict Policies).
1. CORS (Cross-Origin Resource Sharing)
Đây là cơn ác mộng của Frontend Dev mới vào nghề.
Same-Origin Policy (SOP)
Mặc định, Browser cấm một trang web gọi API sang code miền (Origin) khác để ngăn chặn hành vi trộm cắp dữ liệu.
- Origin = Protocol (
https) + Host (google.com) + Port (443). - Khác bất kỳ cái nào => Cross-Origin.
Cơ chế hoạt động của CORS
Khi bạn gọi API từ site-a.com sang api.site-b.com:
- Simple Request: (GET/POST không custom header). Browser gửi luôn.
- Preflight Request: (PUT, DELETE, hoặc có
Authorizationheader).- Browser tự động bắn 1 request
OPTIONShỏi server: "Mày có cho thằngsite-a.comgửi methodDELETEkèm headerTokenkhông?" - Server trả về header:
http:
Access-Control-Allow-Origin: https://site-a.com Access-Control-Allow-Methods: GET, POST, DELETE - Nếu khớp, Browser mới gửi request thật. Nếu không => Lỗi CORS đỏ lòm console.
- Browser tự động bắn 1 request
Lưu ý: CORS là cơ chế của Trình duyệt. Curl hoặc Postman không bị chặn vì không dùng Browser.
2. XSS (Cross-Site Scripting)
Hacker chèn mã JS độc hại vào trang web của bạn để đánh cắp Cookies/Token.
Các loại XSS
- Stored XSS: Mã độc lưu trong Database (VD: Comment). Khi nạn nhân mở xem => dính chưởng.
- Reflected XSS: Mã độc nằm trên URL (Search Params). Nạn nhân click link => dính.
- DOM-based XSS: Mã độc chọc vào DOM thông qua JS.
Phòng chống
- Escape Output: React/Next.js tự động escape HTML khi render
{content}. Cẩn thận khi dùngdangerouslySetInnerHTML. - Content Security Policy (CSP): Khai báo whitelist các nguồn script được phép chạy.
http:
Content-Security-Policy: default-src 'self'; script-src https://trusted.cdn.com3. CSRF (Cross-Site Request Forgery)
Hacker lừa trình duyệt của nạn nhân gửi request "chính chủ" (đã login) sang server.
Kịch bản:
- Bạn đang login ngân hàng
bank.com(Cookie lưu sẵn). - Bạn vào web
evil.com. evil.comcó 1 form ẩn auto-submit:<form action="https://bank.com/transfer" method="POST">.- Trình duyệt thấy request tới
bank.com-> Tự động kẹp Cookie của bạn vào -> Mất tiền.
Phòng chống
- CSRF Token: Server gửi 1 token ngẫu nhiên về form. Hacker không biết token này nên request giả mạo sẽ fail.
- SameSite Cookie: Cấu hình
Set-Cookie: session=...; SameSite=Strict. Browser sẽ KHÔNG gửi cookie nếu request đến từ domain khác.