Open Redirect trong WordPress – Lỗ hổng nhỏ, hậu quả cực lớn

Open Redirect là một trong những lỗ hổng thường bị xem nhẹ nhất nhưng lại cực kỳ nguy hiểm trong WordPress. Chỉ cần một đường dẫn redirect không được kiểm tra đúng cách, hacker có thể lợi dụng để lừa người dùng sang trang độc hại, đánh cắp cookie, lấy OAuth token, làm phishing, hoặc chain thành các tấn công nghiêm trọng hơn.

Open Redirect trong WordPress – Lỗ hổng nhỏ, hậu quả cực lớn

Điều nguy hiểm của Open Redirect là nó không tấn công trực tiếp vào website – nó tấn công vào người dùng thông qua website của bạn, khiến họ tin tưởng rằng link đó là an toàn.

Open Redirect là gì?

Open Redirect xảy ra khi website cho phép người dùng chỉ định URL để redirect đến mà không kiểm tra hoặc giới hạn. Hacker có thể chèn một URL độc hại, và trình duyệt sẽ chuyển hướng nạn nhân đến trang đó thông qua domain của bạn.

Nói ngắn gọn: Website của bạn trở thành “mồi nhử” cho hacker redirect nạn nhân sang trang lừa đảo.

Ví dụ lỗi Open Redirect trong WordPress

1. Redirect từ URL parameter

<?php
$redirect = $_GET['redirect_to'];
wp_redirect( $redirect );
exit;

Link tấn công:

https://example.com/login?redirect_to=https://evil.com/phishing

→ Người dùng tưởng link là của bạn, nhưng khi click sẽ chuyển sang trang giả mạo.

2. Sử dụng wp_safe_redirect() không đúng

wp_safe_redirect( $_GET['url'] );

wp_safe_redirect chỉ an toàn nếu bạn cấu hình allowlist. Nếu không → vẫn dính.

3. Open Redirect trong form login

Trang login WordPress mặc định hỗ trợ redirect_to. Nếu plugin filter sai → dễ lỗi.

Tại sao Open Redirect cực kỳ nguy hiểm?

Mặc dù nó “không hack được server”, nhưng hậu quả của Open Redirect lại rất lớn:

  • Phishing: Hacker dùng domain của bạn để lừa người dùng
  • Đánh cắp session OAuth / SSO
  • Account takeover thông qua redirect token
  • XSS chain: Một số trình duyệt có thể bị chain qua JS scheme
  • SEO penalty: Google đánh spam → tụt rank
  • Mất uy tín thương hiệu

Rất nhiều website lớn bị “blacklist” chỉ vì một lỗi Open Redirect nhỏ.

Ví dụ attacker khai thác Open Redirect

1. Link phishing giả dạng WordPress

https://example.com/wp-login.php?redirect_to=https://evil.com/wp-login-fake

→ Nạn nhân nghĩ là link thật → nhập mật khẩu → mất tài khoản.

2. Lấy OAuth token

Nếu website dùng Google Login, Facebook Login… hacker có thể redirect token trả về sang server của hắn.

3. Lừa người dùng tải malware

“Click vào đây để cập nhật plugin” → redirect → malware.

Cách phòng chống Open Redirect trong WordPress

1. Luôn dùng wp_safe_redirect() thay cho wp_redirect()

wp_safe_redirect() chỉ cho phép redirect đến:

  • cùng domain
  • domain trong allowlist
wp_safe_redirect( $url );
exit;

2. Kiểm tra URL bằng wp_validate_redirect()

$redirect = wp_validate_redirect( $_GET['redirect_to'], home_url() );

Nếu URL không hợp lệ → trả về fallback (home_url).

3. Tự tạo allowlist domain

$allowed = array(
    'example.com',
    'shop.example.com'
);

$host = parse_url( $url, PHP_URL_HOST );

if ( ! in_array( $host, $allowed, true ) ) {
    $url = home_url();
}

4. Không bao giờ cho phép redirect dựa trên URL người dùng nhập

Ví dụ sai:

wp_redirect( $_POST['link'] );

5. Kiểm tra dấu hiệu redirect độc hại

  • URL chứa “http”, “//”, “::”, “javascript:”
  • URL không cùng domain
  • Redirect đến domain không đáng tin

6. Không redirect bằng JavaScript từ input người dùng

// Sai và rất dễ dính XSS + Open Redirect
window.location = getParam("url");

7. Với plugin login/custom auth → phải đặt redirect cố định

$url = home_url('/dashboard');

Checklist chống Open Redirect

  • Dùng wp_safe_redirect() thay vì wp_redirect()
  • Dùng wp_validate_redirect() để kiểm tra URL
  • Không cho user tự truyền URL redirect
  • Nếu cần – dùng allowlist domain cụ thể
  • Không redirect bằng JavaScript từ input
  • Không dùng GET request cho hành động nhạy cảm
  • Log lại mọi redirect bất thường

Kết luận

Open Redirect là một lỗ hổng nhỏ nhưng tác hại lớn trong WordPress. Nó không tấn công server của bạn trực tiếp, nhưng lại biến website của bạn thành “vũ khí” để hacker lừa người dùng, chiếm tài khoản, hoặc phát tán mã độc. Bằng cách sử dụng wp_safe_redirect(), validate URL đúng cách và hạn chế dữ liệu do người dùng cung cấp, bạn có thể ngăn chặn hoàn toàn kiểu tấn công này.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...