- Clickjacking là gì?
- Ví dụ clickjacking đơn giản
- Tại sao clickjacking cực kỳ nguy hiểm với WordPress?
- Dấu hiệu WordPress bị clickjacking
- Cách ngăn chặn clickjacking trong WordPress
- 1. Sử dụng X-Frame-Options
- Cho NGINX
- Cho Apache
- 2. Sử dụng Content Security Policy (CSP)
- 3. Dùng plugin bảo mật hỗ trợ clickjacking protection
- 4. Chặn iframe ở cấp theme/plugin
- 5. Luôn kiểm tra quyền (capability) ở mọi action nhạy cảm
- 6. Thêm confirm step (double-click protection)
- Ví dụ thực tế clickjacking tấn công WordPress
- Checklist chống clickjacking
- Kết luận
Clickjacking là gì?
Clickjacking xảy ra khi attacker tải website của bạn bên trong một khung iframe vô hình, sau đó đặt các nút, ảnh, hoặc nội dung giả đè lên. Khi nạn nhân click vào thành phần “giả”, trình duyệt thực tế đang click vào website thật ở lớp dưới.
Nói ngắn gọn: hacker điều khiển click của nạn nhân mà nạn nhân không hay biết.
Ví dụ clickjacking đơn giản
Attacker tạo một trang như sau:
<div style="position:relative;">
<button style="z-index:2;opacity:0;position:absolute;top:0;left:0;width:300px;height:200px;">
Click here to get reward!
</button>
<iframe
src="https://example.com/wp-admin/user-new.php"
style="width:300px;height:200px;opacity:0.01;z-index:1;"
></iframe>
</div>
Khi nạn nhân click “nhận quà”, thật ra họ đang click vào nút “Add New User” bên trong WordPress admin.
Tại sao clickjacking cực kỳ nguy hiểm với WordPress?
Nếu nạn nhân đang đăng nhập WordPress (đặc biệt là admin), clickjacking có thể dẫn đến:
- Thêm user admin cho hacker
- Kích hoạt plugin chứa backdoor
- Thay đổi email quản trị
- Chỉnh sửa theme/plugin và chèn mã độc
- Thực hiện các hành động trái phép mà không cần XSS hay SQLI
Chỉ cần admin ghé thăm một trang web độc là xong phim.
Dấu hiệu WordPress bị clickjacking
- Website load bên trong iframe của trang khác
- Hệ thống đột nhiên có user lạ
- Có thay đổi cấu hình mà admin không hề thực hiện
- Nhật ký hoạt động (`activity log`) có hành động bất thường
- Các plugin/setting được bật mà không rõ lý do
Cách ngăn chặn clickjacking trong WordPress
Có 3 lớp bảo vệ chính: HTTP Header, security plugin, và server-level rules.
1. Sử dụng X-Frame-Options
Đây là header cổ điển nhưng vẫn rất hiệu quả.
Cho NGINX
add_header X-Frame-Options "SAMEORIGIN";
Cho Apache
Header always append X-Frame-Options SAMEORIGIN
Ý nghĩa:
- SAMEORIGIN: Chỉ cho phép nhúng iframe từ cùng domain
- DENY: Cấm luôn iframe
2. Sử dụng Content Security Policy (CSP)
Hiện đại và mạnh hơn X-Frame-Options.
Content-Security-Policy: frame-ancestors 'self';
Hoặc nếu website cần nhúng iframe từ vài domain:
Content-Security-Policy: frame-ancestors 'self' https://trusted.com;
3. Dùng plugin bảo mật hỗ trợ clickjacking protection
Một số plugin WP hỗ trợ bật anti-clickjacking chỉ bằng 1 click:
- Wordfence
- iThemes Security
- All In One WP Security
Tuy nhiên, cấu hình thủ công bằng HTTP header vẫn mạnh và chuẩn hơn.
4. Chặn iframe ở cấp theme/plugin
Nếu không có quyền sửa server, bạn có thể chèn header qua theme:
<?php
function prevent_clickjacking() {
header( "X-Frame-Options: SAMEORIGIN" );
}
add_action( 'send_headers', 'prevent_clickjacking' );
(Cách này ổn nhưng không mạnh bằng cấu hình server.)
5. Luôn kiểm tra quyền (capability) ở mọi action nhạy cảm
Ngay cả khi bị clickjacking, hacker chỉ có thể thành công nếu action bị lỏng lẻo.
Ví dụ sai:
// Sai: không kiểm tra quyền
wp_update_user( $data );
Ví dụ đúng:
if ( current_user_can( 'manage_options' ) ) {
wp_update_user( $data );
}
6. Thêm confirm step (double-click protection)
Tạo lớp bảo vệ UI đơn giản: yêu cầu xác nhận trước khi hành động nhạy cảm xảy ra.
if (!confirm("Are you sure?")) {
return false;
}
Không phải chống được clickjacking 100%, nhưng giảm nguy cơ khá nhiều.
Ví dụ thực tế clickjacking tấn công WordPress
- Hacker chiếm quyền admin bằng cách ép admin click vào iframe trang “Thêm user mới”
- Tự động bật plugin malware bằng một click ẩn
- Đổi email quản trị → reset password → chiếm site hoàn toàn
- Thay đổi cài đặt permalink gây lỗi toàn site
- Thay đổi webhook để nhận dữ liệu nhạy cảm từ WooCommerce
Checklist chống clickjacking
- Bật X-Frame-Options hoặc CSP frame-ancestors
- Không dùng theme/plugin thiếu capability check
- Luôn kiểm tra actions nhạy cảm (wp_ajax, wp_admin actions)
- Dùng plugin bảo mật hỗ trợ clickjacking protection
- Log lại tất cả hành động admin
- Cảnh giác khi admin truy cập link lạ
Kết luận
Clickjacking tuy đơn giản nhưng cực kỳ nguy hiểm với WordPress, đặc biệt khi mục tiêu là admin. Chỉ cần bật đúng vài HTTP header quan trọng là bạn có thể chặn hoàn toàn kiểu tấn công này. Với những dự án WordPress lớn, clickjacking protection là lớp bảo mật bắt buộc phải có.
Bình luận