1. Lỗ Hổng CSRF (Cross-Site Request Forgery) Là Gì?

CSRF (Cross-Site Request Forgery - Giả mạo yêu cầu từ trang chéo) là một trong những lỗ hổng bảo mật web nguy hiểm nhất nằm trong danh sách OWASP Top 10.

Trong kịch bản tấn công CSRF, kẻ tấn công lừa trình duyệt của nạn nhân (người dùng đã đăng nhập vào website mục tiêu) gửi một yêu cầu HTTP độc hại đến website đó mà nạn nhân hoàn toàn không hay biết.

┌──────────────┐          1. Đăng nhập & lưu Cookie           ┌────────────────────┐
│   Nạn Nhân   │ ───────────────────────────────────────────► │  ThueCloud.vn      │
│  (Trình duyệt│                                              │  (Website Mục Tiêu)│
│   đã login)  │ ◄─────────────────────────────────────────── │                    │
└──────┬───────┘          2. Cấp Session Cookie               └────────────────────┘
       │
       │ 3. Vô tình bấm vào trang web độc hại của hacker (hacker-site.com)
       ▼
┌──────────────┐          4. Kịch bản ẩn tự động gửi POST     ┌────────────────────┐
│ Hacker Site  │ ───────────────────────────────────────────► │  ThueCloud.vn      │
│ (Form ngầm)  │       (Kèm Cookie hợp lệ của nạn nhân)       │  (Bị đổi pass/tiền)│
└──────────────┘                                              └────────────────────┘

2. Ví Dụ Kịch Bản Tấn Công Thực Tế

Giả sử website ngân hàng hoặc ví điện tử có endpoint chuyển tiền dạng:

POST /api/wallet/transfer
Host: mybank.com
Cookie: session_id=SECRET_COOKIE_123

amount=10000000&recipient=hacker_account

Kẻ tấn công tạo một trang web độc hại free-gift.com chứa mã HTML ẩn:

<form id="csrfForm" action="https://mybank.com/api/wallet/transfer" method="POST">
  <input type="hidden" name="amount" value="10000000" />
  <input type="hidden" name="recipient" value="hacker_account" />
</form>
<script>
  document.getElementById('csrfForm').submit();
</script>

Khi nạn nhân truy cập vào trang free-gift.com, trình duyệt sẽ tự động gửi kèm Cookie phiên của nạn nhân đến mybank.com, khiến giao dịch bị thực hiện thành công.


3. Các Phương Pháp Phòng Chống CSRF Chuẩn Mực Nhất 2026

Thuộc tính SameSite quy định trình duyệt không được gửi kèm cookie khi request bắt nguồn từ một tên miền khác:

Set-Cookie: session_token=xyz987; SameSite=Lax; HttpOnly; Secure; Path=/
  • SameSite=Strict: Cookie chỉ được gửi duy nhất khi người dùng duyệt trên cùng một domain.
  • SameSite=Lax (Mặc định): Cho phép gửi cookie khi click link chuyển hướng thông thường, nhưng chặn hoàn toàn trong các form POST ngầm từ trang khác.

3.2. Synchronizer Anti-CSRF Token

Mỗi khi render form hoặc nạp ứng dụng, máy chủ sinh ra một chuỗi ngẫu nhiên mã hóa (Token bí mật) và gắn vào form:

<input type="hidden" name="_csrf" value="d9f4e2b8a1c7e6..." />

Khi nhận request POST/PUT/DELETE, máy chủ so sánh token gửi lên với token lưu trong session của người dùng.

3.3. Sử Dụng Custom Request Headers Cho RESTful API

Các ứng dụng SPA (Next.js, React) gửi request qua fetch hoặc axios kèm custom header:

axios.post('/api/checkout', data, {
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
    'X-CSRF-Token': csrfToken,
  }
});

Do chính sách CORS (Cross-Origin Resource Sharing), trang web của kẻ tấn công không thể tự ý đính kèm custom header này nếu không được máy chủ cho phép.


4. Kết Luận

Bảo mật là tiêu chí hàng đầu khi xây dựng hệ thống web và thanh toán số.

🔒 Hạ tầng an toàn chuẩn quốc tế: Triển khai website của bạn trên Cloud VPS KVM hoặc Web Hosting Bảo Mật tại ThueCloud.vn!