WordPress là một nền tảng tuyệt vời và phổ biến nhất thế giới, nhưng sự phổ biến đó cũng biến nó thành mục tiêu béo bở của các hacker. Nếu bạn thường xuyên theo dõi log server (file truy cập hệ thống), bạn sẽ thấy hàng ngàn, thậm chí hàng chục ngàn lượt truy cập đáng ngờ nhắm vào một file duy nhất: xmlrpc.php.
Nếu website của bạn đột nhiên chạy chậm, CPU server quá tải (đặc biệt là tiến trình PHP-FPM) hoặc băng thông bị ngốn sạch không rõ lý do, rất có thể bạn đang là nạn nhân của một cuộc tấn công qua file này.
Vậy chính xác xmlrpc.php là gì? Nó có thực sự cần thiết hay chỉ là một “tàn dư” gây nguy hiểm cho hệ thống? Trong bài viết này, chúng ta sẽ mổ xẻ chi tiết và hướng dẫn bạn cách vô hiệu hóa nó từ A-Z ở cấp độ server và website.
XMLRPC.PHP là gì?
XML-RPC (XML Remote Procedure Call) là một giao thức gọi hàm từ xa sử dụng định dạng XML để mã hóa dữ liệu và HTTP làm cơ chế truyền tải.
Trong hệ sinh thái WordPress, file xmlrpc.php được ra đời từ những phiên bản đầu tiên. Nó đóng vai trò là “cây cầu” giao tiếp, cho phép các hệ thống, ứng dụng hoặc website bên ngoài có thể kết nối và tương tác với website WordPress của bạn từ xa mà không cần phải đăng nhập trực tiếp vào giao diện quản trị wp-admin.
Nói một cách dễ hiểu: Nếu bạn muốn dùng một ứng dụng trên điện thoại để đăng bài viết lên blog WordPress của mình, ứng dụng đó sẽ đóng gói dữ liệu bài viết thành một file XML, gửi qua HTTP đến file xmlrpc.php trên server của bạn. File này sẽ tiếp nhận, dịch lại và đưa bài viết vào cơ sở dữ liệu.
XMLRPC dùng để làm gì trong WordPress?
Trước khi WordPress REST API ra đời (từ phiên bản 4.4), XML-RPC là cách duy nhất để thực hiện các kết nối từ xa. Các tính năng chính của nó bao gồm:
-
Đăng bài từ xa (Remote Publishing): Hỗ trợ các phần mềm viết blog ngoại tuyến như Windows Live Writer, hoặc các phiên bản cũ của ứng dụng WordPress trên iOS/Android.
-
Pingbacks & Trackbacks: Đây là tính năng thông báo khi có một website khác chèn link trỏ về bài viết của bạn. Hai website sẽ “nói chuyện” với nhau thông qua
xmlrpc.php. -
Tích hợp với dịch vụ của bên thứ ba: Phổ biến nhất là plugin Jetpack và các dịch vụ quản lý nhiều website WordPress cùng lúc (như ManageWP, MainWP cũ).
-
Tự động hóa (Automation): Cho phép các công cụ tự động hóa như IFTTT hoặc Zapier tạo bài viết tự động.
Tuy nhiên, với sự phát triển của WordPress REST API, các ứng dụng hiện đại đã chuyển sang sử dụng JSON thay vì XML, khiến XML-RPC trở thành một công nghệ lỗi thời (legacy).
Tại sao XMLRPC lại nguy hiểm (XMLRPC Attack)?
Vì xmlrpc.php cho phép thực thi lệnh từ xa nên nó vô tình trở thành “cửa sau” yêu thích của các hacker. Có hai hình thức tấn công xmlrpc attack phổ biến và nguy hiểm nhất mà mọi quản trị viên hệ thống đều phải dè chừng:
1. Brute Force Attack (Tấn công dò mật khẩu cường độ cao)
Thông thường, trang đăng nhập wp-login.php sẽ bị giới hạn số lần thử mật khẩu sai (nếu bạn cài plugin bảo mật). Tuy nhiên, xmlrpc.php lại sở hữu một hàm tên là system.multicall.
Hàm này cho phép hacker gộp hàng ngàn lệnh thử tài khoản và mật khẩu vào cùng một HTTP request duy nhất. Thay vì gửi 1000 yêu cầu đăng nhập và bị chặn bởi tường lửa, hacker chỉ gửi 1 yêu cầu chứa 1000 cặp user/password. Điều này giúp chúng vượt qua các cơ chế chống Brute Force thông thường và nhanh chóng dò ra mật khẩu quản trị viên.
2. DDoS thông qua Pingback (Tấn công từ chối dịch vụ)
Hacker có thể lợi dụng tính năng pingback của hàng ngàn website WordPress có bật XML-RPC để tấn công một mục tiêu khác. Chúng gửi một lệnh pingback giả mạo đến file xmlrpc.php trên site của bạn, yêu cầu site của bạn kết nối đến website nạn nhân. Khi hàng vạn website WordPress cùng làm điều này một lúc, website nạn nhân sẽ bị sập vì quá tải (DDoS).
Hậu quả là website của bạn vô tình biến thành một “zombie” trong mạng lưới botnet, làm cạn kiệt tài nguyên máy chủ (đặc biệt nguy hiểm với các mô hình Shared Hosting hoặc VPS có cấu hình thấp).
Có nên tắt XMLRPC WordPress không?
Câu trả lời ngắn gọn là: CÓ, 99% trường hợp bạn nên tắt nó.
Bạn chỉ nên giữ lại xmlrpc.php nếu:
-
Bạn đang sử dụng plugin Jetpack (Jetpack phụ thuộc rất nhiều vào XML-RPC).
-
Bạn dùng một hệ thống CRM/ERP rất cũ chỉ hỗ trợ đồng bộ dữ liệu qua XML-RPC.
Đối với các website thương mại điện tử, WooCommerce hay các blog lớn, việc để mở file này vừa là lỗ hổng bảo mật, vừa là nguyên nhân làm tiêu hao tài nguyên CPU/RAM vô ích khi server liên tục phải phản hồi các bot quét rác. Chuyển sang REST API là giải pháp an toàn và tối ưu hơn.
Cách kiểm tra XMLRPC đang bật hay tắt
Trước khi thao tác, bạn cần kiểm tra xem website của mình đang đóng hay mở cổng này.
-
Cách 1: Truy cập trực tiếp vào đường dẫn: tenmiencuaban . Nếu trình duyệt hiển thị dòng chữ
XML-RPC server accepts POST requests only., nghĩa là XML-RPC đang được BẬT. -
Cách 2: Sử dụng công cụ miễn phí XML-RPC Validator trên mạng để check.
-
Cách 3: Mở Terminal và chạy lệnh cURL:
curl -I tenmiencuaban
Nếu HTTP Status Code trả về là 200 OK, file đang hoạt động. Nếu trả về 403 Forbidden hoặc 404 Not Found, file đã bị khóa.
Hướng dẫn vô hiệu hóa XMLRPC từ A-Z (Chi tiết từng cách)
Để disable xmlrpc wordpress, bạn có thể chọn một trong các phương pháp sau tùy thuộc vào quyền kiểm soát hệ thống của bạn (từ giao diện admin WP đến quyền root của Server).
1. Tắt bằng Plugin (Dành cho người mới)
Đây là cách đơn giản nhất, không yêu cầu kiến thức lập trình.
-
Đăng nhập vào WordPress Admin.
-
Vào Plugins > Add New (Cài mới).
-
Tìm kiếm từ khóa
Disable XML-RPC. -
Cài đặt và kích hoạt plugin Disable XML-RPC-API (của tác giả Neologix).
-
Plugin sẽ tự động chạy ngầm và chặn mọi kết nối vào file này mà không cần cấu hình thêm.
Lưu ý: Cách này tuy dễ nhưng request vẫn chạm tới PHP trên server, do đó không giải quyết triệt để vấn đề tốn tài nguyên khi bị DDoS mạnh.
2. Tắt bằng .htaccess (Dành cho Web Server Apache / LiteSpeed)
Nếu bạn đang sử dụng Apache hoặc LiteSpeed (phổ biến trên các Shared Hosting hoặc các site thương mại điện tử lớn), bạn có thể chặn yêu cầu ngay từ lớp Web Server, không cho phép nó gửi tới bộ xử lý PHP.
-
Đăng nhập vào cPanel/DirectAdmin hoặc kết nối FTP vào host.
-
Tìm file
.htaccessở thư mục gốc (public_html). -
Thêm đoạn mã sau vào cuối file:
Block WordPress xmlrpc.php requests
Order Allow,Deny Deny from all3. Tắt XMLRPC bằng Nginx config (Tối ưu nhất cho VPS/Server)
Nếu bạn quản trị VPS/Server chạy Nginx (ví dụ các hệ điều hành như CentOS, Ubuntu) cấu hình với PHP-FPM, đây là phương pháp tuyệt đối và tối ưu nhất. Nó sẽ ngắt kết nối ngay lập tức (Drop connection) trước khi Nginx kịp gọi PHP-FPM.
-
SSH vào server của bạn.
-
Mở file cấu hình vhost của domain (thường nằm ở
/etc/nginx/conf.d/domain.com.confhoặc/etc/nginx/sites-available/domain.com). -
Thêm block
locationsau vào bên trong blockserver { ... }:
server {
Các cấu hình hiện tại của bạn…
# Chặn hoàn toàn truy cập vào xmlrpc.php location = /xmlrpc.php { deny all; access_log off; # Tắt log để tránh đầy ổ cứng khi bị ddos log_not_found off; }}
Lưu file và khởi động lại Nginx: systemctl reload nginx
Những lưu ý khi tắt XMLRPC
-
Lỗi khi dùng Jetpack: Jetpack sử dụng hệ thống máy chủ của WordPress.com để xử lý hình ảnh và dữ liệu, nó yêu cầu
xmlrpc.phpphải mở. Nếu bạn tắt, Jetpack sẽ báo lỗi mất kết nối ngay lập tức. -
Whitelist (Cho phép ngoại lệ): Nếu bạn bắt buộc phải dùng một dịch vụ qua XML-RPC (như Jetpack), thay vì
Deny from all, bạn có thể chỉ cho phép các IP của Jetpack truy cập vào file này bằng luật Allow IP trong.htaccesshoặc Nginx. -
Ứng dụng điện thoại: Các phiên bản App WordPress trên di động hiện tại đã hỗ trợ REST API, do đó việc tắt XML-RPC không còn ảnh hưởng đến việc bạn dùng điện thoại để viết blog nữa.
Câu hỏi thường gặp (FAQ)
1. WordPress REST API có thay thế hoàn toàn XML-RPC không? Có. REST API linh hoạt, bảo mật và tương thích với các công nghệ web hiện đại (JSON) hơn rất nhiều so với XML-RPC. Đa số các plugin và hệ thống hiện đại đều đã chuyển sang dùng REST API.
2. Tôi có thể chặn XMLRPC qua Cloudflare được không? Hoàn toàn được và rất hiệu quả. Bạn có thể vào phần Security > WAF (Web Application Firewall) trên Cloudflare, tạo một Rule mới chặn (Block) mọi request có đường dẫn URI chứa xmlrpc.php. Điều này thậm chí còn tốt hơn cả Nginx vì traffic rác bị chặn ngay tại mạng lưới của Cloudflare, không bao giờ chạm đến máy chủ của bạn.
3. Làm sao để kiểm tra server của tôi có đang bị tấn công qua XMLRPC hay không? Nếu bạn dùng Linux (CentOS/Ubuntu), hãy ssh vào server và kiểm tra file log truy cập bằng lệnh: grep "xmlrpc.php" /var/log/nginx/access.log | wc -l (Sửa lại đường dẫn log cho phù hợp với server của bạn). Nếu con số trả về lên tới hàng chục ngàn trong một ngày, server của bạn đang bị scan/tấn công.
Lời kết & Khuyến nghị bảo mật
Hiểu rõ xmlrpc.php là gì và cách nó hoạt động giúp bạn làm chủ được hệ thống của mình tốt hơn. Trong môi trường an ninh mạng phức tạp hiện nay, việc loại bỏ các giao thức cũ kỹ, không còn sử dụng là bước đầu tiên và quan trọng nhất để gia cố bức tường phòng thủ cho hệ thống.