BizMaC bizmac.com

Vô hiệu hoá XML-RPC trong WordPress

Hướng dẫn WordPress · cập nhật 19/08/2026

Để vô hiệu hoá XML-RPC trong WordPress, bạn chặn thẳng file xmlrpc.php trong .htaccess, hoặc thêm một dòng bộ lọc vào functions.php, hoặc bật tuỳ chọn tương ứng trong plugin bảo mật. Cách nhanh nhất mất khoảng 5 phút.

Việc này cần làm khi log truy cập đầy các dòng POST tới xmlrpc.php, website chậm bất thường hoặc hosting báo vượt tài nguyên mà lượng khách thật không tăng. Kẻ tấn công dùng file này để dò mật khẩu hàng nghìn lần mỗi phút, hoặc mượn website của bạn để đánh website khác.

  1. Đọc log truy cập để xác nhận website đang bị gọi vào xmlrpc.php.
  2. Kiểm xem có plugin nào đang cần XML-RPC không.
  3. Chọn một trong ba cách chặn và làm theo.
  4. Gọi thử file để xác nhận đã chặn được.
Sao lưu .htaccessfunctions.php trước khi sửa. Hai file này sai cú pháp là website trả lỗi 500 hoặc màn hình trắng, và trang quản trị cũng không vào được. Tải bản gốc về máy qua FTP hoặc File Manager trước khi lưu đè.

XML-RPC dùng để làm gì và khi nào nên tắt

XML-RPC là cổng cho phép phần mềm bên ngoài đăng nhập và thao tác với WordPress từ xa, chẳng hạn đăng bài từ ứng dụng điện thoại. Cổng này bật sẵn từ WordPress 3.5 và không tắt được trong trang quản trị. WordPress 4.7 đã có REST API thay thế, nên phần lớn website hiện nay không còn cần XML-RPC.

Trước khi chặn, kiểm xem có thứ gì đang dùng cổng này không. Bảng dưới liệt kê các trường hợp còn phụ thuộc.

Thứ đang dùngCòn cần XML-RPCGhi chú
Ứng dụng WordPress trên điện thoạiKhôngBản mới đã chuyển sang REST API
JetpackMột số tính năng vẫn gọi qua xmlrpc.php
Pingback và trackbackPhần lớn website tắt hẳn vì spam
Đăng bài từ phần mềm ngoàiTuỳ phần mềmKiểm tài liệu của phần mềm đó
Gutenberg, REST API, WooCommerceKhôngDùng đường khác, chặn không ảnh hưởng

Không dùng Jetpack và không cần pingback thì chặn hẳn là lựa chọn gọn nhất. Đang dùng Jetpack thì chỉ tắt riêng pingback, giữ phần còn lại chạy, cách làm ở mục plugin bên dưới.

Cách đọc log để biết website đang bị tấn công qua XML-RPC

Dấu hiệu rõ nhất nằm trong file log truy cập của hosting, thường ở ~/logs/ hoặc mục Raw Access Logs trong bảng điều khiển. Tấn công qua cổng này để lại hàng loạt dòng POST tới cùng một file, cách nhau chưa tới một giây, phần lớn từ vài địa chỉ IP lặp lại.

Một đoạn log điển hình có dạng như sau:

203.0.113.24 - - [15/Sep/2025:12:54:49 +0700] "POST /xmlrpc.php HTTP/1.1" 200 674
203.0.113.24 - - [15/Sep/2025:12:54:50 +0700] "POST /xmlrpc.php HTTP/1.1" 200 674
203.0.113.24 - - [15/Sep/2025:12:54:50 +0700] "POST /xmlrpc.php HTTP/1.1" 200 674
203.0.113.24 - - [15/Sep/2025:12:54:51 +0700] "POST /xmlrpc.php HTTP/1.1" 200 674

Đếm nhanh số lần bằng lệnh dưới đây nếu hosting cho truy cập SSH. Con số vài chục là bình thường, vài nghìn trong một ngày là đang bị dò.

grep -c "POST /xmlrpc.php" ~/logs/access.log

Xem địa chỉ IP nào gọi nhiều nhất:

grep "POST /xmlrpc.php" ~/logs/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head

Hai kiểu tấn công lợi dụng file xmlrpc.php

Cổng XML-RPC bị khai thác theo hai hướng khác nhau, một hướng nhắm vào mật khẩu của bạn, một hướng mượn website của bạn để đánh nơi khác. Cả hai đều làm máy chủ tốn tài nguyên và làm website chậm.

Dò mật khẩu hàng loạt qua một lượt gọi

Trang đăng nhập wp-login.php chỉ thử được một cặp tài khoản mật khẩu mỗi lần gửi, và plugin bảo mật khoá lại sau vài lần sai. XML-RPC có phương thức system.multicall gói được hàng trăm cặp vào một lượt gọi duy nhất, nên một yêu cầu thử được cả trăm mật khẩu mà bộ đếm lần sai chỉ tăng một.

Mượn website của bạn để đánh website khác

Phương thức pingback.ping khiến website của bạn tự gửi yêu cầu tới một địa chỉ do kẻ tấn công chỉ định. Gom hàng nghìn website WordPress cùng làm việc đó là thành một đợt tấn công từ chối dịch vụ, mà địa chỉ IP đi tấn công lại là IP hosting của bạn. Hậu quả gần nhất là IP vào danh sách đen và thư gửi từ tên miền bị chặn.

Các cách vô hiệu hoá XML-RPC trong WordPress

Ba cách dưới đây khác nhau ở chỗ chặn ở lớp nào. Chặn ở máy chủ nhẹ nhất vì yêu cầu bị chặn trước khi PHP kịp chạy. Chặn bằng code hoặc plugin thì PHP vẫn phải khởi động, tốn tài nguyên hơn nhưng đổi lại linh hoạt hơn.

1. Chặn ở tầng máy chủ bằng .htaccess

Đây là cách nên chọn nếu hosting chạy Apache hoặc LiteSpeed, gồm hầu hết hosting dùng DirectAdmin, cPanel và Plesk. Thêm đoạn dưới vào .htaccess ở thư mục gốc website, đặt phía trên khối # BEGIN WordPress.

<Files "xmlrpc.php">
  Require all denied
</Files>

Máy chủ chạy Apache 2.2 cũ thì cú pháp khác, dùng đoạn sau:

<Files "xmlrpc.php">
  Order Allow,Deny
  Deny from all
</Files>

Cần giữ quyền cho một địa chỉ IP nhất định, ví dụ máy chủ Jetpack hoặc IP văn phòng, thì mở riêng cho IP đó:

<Files "xmlrpc.php">
  Require all denied
  Require ip 203.0.113.10
</Files>

Cách này trả về mã 403 và tiêu tốn rất ít tài nguyên, vì máy chủ từ chối ngay chứ không nạp WordPress. Đây là điểm hơn hẳn so với hai cách còn lại khi website đang bị dò với tần suất cao.

2. Tắt bằng một dòng trong functions.php

Hosting chạy Nginx không đọc .htaccess, khi đó dùng bộ lọc của WordPress. Thêm dòng sau vào functions.php của theme con:

add_filter('xmlrpc_enabled', '__return_false');

Dòng này tắt các phương thức cần đăng nhập, nên chặn được kiểu dò mật khẩu. Nhưng file xmlrpc.php vẫn tồn tại và vẫn nạp WordPress mỗi lần bị gọi, nên máy chủ vẫn tốn tài nguyên. Nó cũng không tắt pingback, muốn tắt luôn thì thêm đoạn:

add_filter('xmlrpc_methods', function ($methods) {
    unset($methods['pingback.ping']);
    unset($methods['pingback.extensions.getPingbacks']);
    return $methods;
});

Đặt code vào theme con, đừng đặt vào theme mẹ. Theme mẹ cập nhật là functions.php bị ghi đè và đoạn code biến mất mà không có thông báo.

3. Bật tuỳ chọn trong plugin bảo mật

Cách này hợp khi bạn không muốn đụng vào file. Plugin Solid Security, tên cũ là iThemes Security, có sẵn mục này. Vào Security rồi WordPress Tweaks rồi Configure settings, tìm mục XML-RPC.

Mục XML-RPC trong phần WordPress Tweaks của plugin bảo mật với ba tuỳ chọn Disable, Disable Pingbacks và Enable
Ba mức chặn trong plugin, chọn Disable Pingbacks nếu còn dùng Jetpack.

Ba tuỳ chọn ở mục này khác nhau ở mức độ chặn:

  • Disable XML-RPC tắt hẳn. Jetpack, ứng dụng WordPress trên điện thoại và pingback đều ngừng chạy.
  • Disable Pingbacks chỉ tắt pingback, giữ phần còn lại. Chọn mức này khi còn dùng Jetpack.
  • Enable XML-RPC để nguyên như mặc định của WordPress.

Wordfence và Solid Security đều có mục tương tự. Đừng cài nhiều plugin bảo mật cùng lúc để chặn một thứ, hai plugin ghi cùng một luật vào .htaccess là gây lỗi.

Cách kiểm tra XML-RPC đã bị chặn

Mở trình duyệt và gõ https://tenmien.com/xmlrpc.php. Kết quả cho biết ngay cách chặn đã ăn chưa, và ăn ở lớp nào.

Màn hình hiện raNghĩa là
Lỗi 403 ForbiddenĐã chặn ở tầng máy chủ, cách hiệu quả nhất
Dòng chữ XML-RPC server accepts POST requests onlyFile còn chạy, cách chặn chưa ăn hoặc mới chỉ tắt phương thức đăng nhập
Lỗi 404 Not FoundFile đã bị xoá hoặc chuyển hướng
Trang trắng không nội dungPHP lỗi, kiểm lại đoạn code vừa thêm vào functions.php

Kiểm kỹ hơn bằng dòng lệnh nếu máy bạn có curl:

curl -s -o /dev/null -w "%{http_code}\n" https://tenmien.com/xmlrpc.php

Kết quả trả về 403 là đã chặn ở tầng máy chủ. Trả về 200 là file vẫn nhận yêu cầu. Sau khi chặn, mở lại trang chủ và một bài viết để chắc website vẫn chạy bình thường, rồi đọc lại log sau một ngày xem lượng gọi tới file đã ngừng chưa.

Xử lý các lỗi thường gặp sau khi chặn

Bốn tình huống dưới đây hay gặp sau khi làm xong. Phần lớn là do có thứ đang cần XML-RPC mà chưa kiểm trước.

Jetpack báo mất kết nối với WordPress.com. Bạn đã chặn hẳn trong khi Jetpack còn cần cổng này. Đổi sang mức chỉ tắt pingback, hoặc mở riêng dải IP của Jetpack trong .htaccess.

Website trả lỗi 500 ngay sau khi sửa .htaccess. Cú pháp không hợp với bản Apache đang chạy, thường là dùng Require all denied trên Apache 2.2. Khôi phục bản sao lưu rồi thử cú pháp còn lại.

Log vẫn đầy dòng POST tới xmlrpc.php. Chặn bằng bộ lọc PHP thì yêu cầu vẫn tới máy chủ và vẫn ghi vào log, chỉ khác là không đăng nhập được. Muốn cắt hẳn phần ghi log thì chuyển sang chặn bằng .htaccess.

Đã chặn mà website vẫn chậm. XML-RPC không phải nguồn tải duy nhất. Đọc log tìm các đường dẫn khác bị gọi dồn dập, thường là wp-login.phpwp-cron.php. Đổi địa chỉ đăng nhập bằng cách ở bài thay đổi URL đăng nhập WordPress với WPS Hide Login giảm được phần lớn lượt dò vào trang đăng nhập.

Việc nên làm tiếp để chặn dò mật khẩu

Chặn XML-RPC mới đóng một cửa. Trang đăng nhập mặc định vẫn mở, và wp-cron.php cũng hay bị gọi dồn để làm cạn tài nguyên. Cả ba cửa nên xử lý cùng đợt thì mới thấy tải máy chủ giảm rõ.

Ba việc nên làm ngay sau bài này:

  1. Đổi địa chỉ đăng nhập khỏi /wp-admin mặc định.
  2. Bật giới hạn số lần đăng nhập sai, khoá IP sau 5 lần.
  3. Bật xác thực hai bước cho tài khoản có quyền quản trị.

Máy chủ riêng hoặc VPS thì thêm một lớp tường lửa phía trước, chặn IP dò ngay từ ngoài để website không phải xử lý. Bài cài đặt ConfigServer Security Firewall CSF có phần khai luật chặn theo tần suất truy cập.

Hướng dẫn này có giúp được Anh/Chị không?

Bài khác trong WordPress

Xem cả 18 bài
Submit lại website WordPress lên Google Gửi lại trang chủ bằng công cụ Kiểm tra URL và nộp lại sitemap sau khi dọn mã độc, kèm mốc thời gian Google cập nhật và lý do gửi rồi vẫn không lên. 8 phút đọc 35 lượt xem Cập nhật 23/08/2026 Cài đặt WordPress trên hosting Plesk WordPress Toolkit tự tạo cơ sở dữ liệu và tài khoản quản trị. Các bước cài, việc cần làm ngay sau đó và cách xử lý lỗi hay gặp. 7 phút đọc 133 lượt xem Cập nhật 22/08/2026 Cập nhật WordPress theme và plugin an toàn Hướng dẫn cập nhật WordPress, theme và plugin an toàn: sao lưu trước khi cập nhật, làm từng phần theo thứ tự, kiểm website sau mỗi bước và bật cập nhật tự động hợp lý. 7 phút đọc 5 lượt xem Cập nhật 21/08/2026 Đổi mật khẩu và tạo user quản trị WordPress Hướng dẫn đổi mật khẩu WordPress an toàn và tạo user quản trị mới: đặt mật khẩu mạnh, đăng xuất các phiên lạ, phân đúng vai trò người dùng và dọn tài khoản thừa. 7 phút đọc 8 lượt xem Cập nhật 21/08/2026 Sao lưu website WordPress bằng UpdraftPlus Hướng dẫn sao lưu website WordPress bằng plugin UpdraftPlus: chạy bản sao đầu tiên, chọn nơi lưu ngoài hosting như Google Drive, đặt lịch tự động và kiểm khôi phục. 7 phút đọc 10 lượt xem Cập nhật 21/08/2026 Thiết lập đường dẫn tĩnh chuẩn SEO Permalink Hướng dẫn thiết lập đường dẫn tĩnh Permalink chuẩn SEO trên WordPress: đổi sang kiểu tên bài viết, so sánh các kiểu đường dẫn và lưu ý khi đổi trên website đã chạy lâu. 6 phút đọc 9 lượt xem Cập nhật 19/08/2026

Làm theo vẫn chưa được?

Gửi yêu cầu hỗ trợ, kỹ thuật xem trực tiếp trên dịch vụ của Anh/Chị.

Gửi yêu cầu hỗ trợ