- Open Redirect là gì?
- Ví dụ lỗi Open Redirect trong WordPress
- 1. Redirect từ URL parameter
- 2. Sử dụng wp_safe_redirect() không đúng
- 3. Open Redirect trong form login
- Tại sao Open Redirect cực kỳ nguy hiểm?
- Ví dụ attacker khai thác Open Redirect
- 1. Link phishing giả dạng WordPress
- 2. Lấy OAuth token
- 3. Lừa người dùng tải malware
- Cách phòng chống Open Redirect trong WordPress
- 1. Luôn dùng wp_safe_redirect() thay cho wp_redirect()
- 2. Kiểm tra URL bằng wp_validate_redirect()
- 3. Tự tạo allowlist domain
- 4. Không bao giờ cho phép redirect dựa trên URL người dùng nhập
- 5. Kiểm tra dấu hiệu redirect độc hại
- 6. Không redirect bằng JavaScript từ input người dùng
- 7. Với plugin login/custom auth → phải đặt redirect cố định
- Checklist chống Open Redirect
- Kết luậ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