Mục lục

Web Security Deep Dive: CORS, XSS & CSRF

Tại sao Browser chặn request của bạn? Cơ chế CORS hoạt động thế nào? Bảo vệ ứng dụng khỏi XSS và CSRF.

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:

  1. Simple Request: (GET/POST không custom header). Browser gửi luôn.
  2. Preflight Request: (PUT, DELETE, hoặc có Authorization header).
    • Browser tự động bắn 1 request OPTIONS hỏi server: "Mày có cho thằng site-a.com gửi method DELETE kèm header Token khô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.

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

  1. Stored XSS: Mã độc lưu trong Database (VD: Comment). Khi nạn nhân mở xem => dính chưởng.
  2. Reflected XSS: Mã độc nằm trên URL (Search Params). Nạn nhân click link => dính.
  3. 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ùng dangerouslySetInnerHTML.
  • 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.com

3. 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:

  1. Bạn đang login ngân hàng bank.com (Cookie lưu sẵn).
  2. Bạn vào web evil.com.
  3. evil.com có 1 form ẩn auto-submit: <form action="https://bank.com/transfer" method="POST">.
  4. 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.
Quảng cáo
mdhorizontal