XML-RPC là một giao thức giúp WordPress kết nối với thế giới bên ngoài, cho phép người dùng quản lý nội dung một cách linh hoạt và hiệu quả hơn. Cùng Terus tìm hiểu tại sao một công cụ như vậy nhưng lại khuyên là không nên dùng nữa qua bài viết này.

I. XML-RPC là gì?
XML-RPC là một công cụ mạnh mẽ, cho phép bạn quản lý nội dung WordPress từ xa và kết nối với các hệ thống bên thứ ba, mang đến nhiều tiện ích cho người dùng, tuy nhiên bạn cần lưu ý đến các vấn đề về bảo mật.
Với tính năng XML-RPC, WordPress trở nên linh hoạt hơn bao giờ hết, cho phép người dùng quản lý website mọi lúc mọi nơi, từ đó tăng hiệu quả làm việc và tiết kiệm thời gian.
II. Lý do XMLRPC từng rất thông dụng
Trước đây, khi kết nối internet còn hạn chế, XMLRPC.PHP đã trở thành một công cụ hữu ích cho phép người dùng quản lý nội dung WordPress một cách linh hoạt, ngay cả khi không có kết nối mạng ổn định.
Hệ thống cho phép bạn làm việc offline một cách hiệu quả, đồng thời đảm bảo sự đồng bộ hóa dữ liệu với trang web chính thông qua file XMLRPC.PHP, giúp tiết kiệm thời gian và tăng năng suất làm việc.
Với sự phổ biến của smartphone và ứng dụng di động, cùng với sự phát triển mạnh mẽ của mạng internet, XML-RPC.PHP không còn là lựa chọn tối ưu cho các ứng dụng hiện đại.
III. Ứng dụng của XMLRPC là gì?
Trong WordPress, XMLRPC gồm có 2 phần chính: XMLRPC server và XMLRPC client:
- XMLRPC server là một web server, có chức năng nhận thông tin đã được mã hoá từ XMLRPC client.
- XMLRPC client: là hệ thống sử dụng XML để mã hóa tham số, và gửi nội dung XML đã được mã hoá đó vào XMLRPC server.
Cách kích hoạt XMLRPC trong WordPress
Hướng dẫn cách cài XMLRPC
- Cài plugin “Control XMLRPC publishing”
- Trên WordPress, chọn Settings ->Write -> Remote publishing with XMLRPC -> Enabled
- Nhấn Save changes để lưu thay đổi. Vậy là XMLRPC đã được kích hoạt.
WordPress XMLRPC Server
- Đăng ký hàm XMLRPC mới: Bạn chỉ cần copy và làm thêm vào đúng đoạn code tôi để bên dưới
add_filter( 'xmlrpc_methods', 'add_xml_rpc_methods' );
function add_xml_rpc_methods( $methods ) {
$methods['frs.helloTerus] = 'hello_terus';
return $methods;
}
Chúng ta đã tạo hàm helloTerus trong namespace frs và gọi lại hàm này thông qua callback hello_terus.
Hàm cần được thiết kế để trả về một kết quả cụ thể. Thay vì in trực tiếp ra màn hình, hãy sử dụng câu lệnh return để truyền giá trị đó ra ngoài. Việc xóa hàm RPC cũng tương tự như cách tạo hàm, bằng cách sử dụng hàm xmlrpc_methods.
function mynamespace_remove_xmlrpc_methods( $methods ) {
unset( $methods['demo.addTwoNumbers'] );
unset( $methods['frs.helloTerus'] );
return $methods;
}
add_filter( 'xmlrpc_methods', 'mynamespace_remove_xmlrpc_methods');
XMLRPC Client
Tạo lớp xử lý gọi hàm từ XMLRPC Server
- Bước 1: Kết nối với XMLRPC Server
- Bước 2: Tạo lớp XMLRPC_Client với nội dung có sẵn
/*create XML-RPC PHP client*/
class XMLRPC_Client {
private $url;
function __construct( $url ) {
$this->url = $url;
}
public function call() {
$params = func_get_args();
$method = array_shift( $params );
$post = xmlrpc_encode_request( $method, $params );
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $this->url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $post );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$response = curl_exec( $ch );
$response_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
$curl_errorno = curl_errno( $ch );
$curl_error = curl_error( $ch );
curl_close( $ch );
if ( $curl_errorno != 0 ) {
die( "Curl ERROR: {$curl_errorno} - {$curl_error}n" );
}
if ( $response_code != 200 ) {
die( "ERROR: non-200 response from server: {$response_code} - {$response}n" );
}
return xmlrpc_decode( $response );
}
}
Gọi hàm RPC
- Kết nối tới XMLRPC Server
- Truy cập XMLRPC_Client
- Tạo instance trên XMLRPC_Client
- Dùng hàm “//call method ” để tiến hành gọi hàm
$client = new XMLRPC_Client( "http://127.0.0.1:81/wordpress/xmlrpc.php" );
$available_methods = $client->call( 'system.listMethods' );
print_r( $available_methods );
Lợi ích của XMLRPC là bạn có thể gọi nhiều hàm trên một kết nối XMPRPC, như ở đây chúng ta có thể gọi tiếp hàm demo.sayTerus .
$test= $client->call( 'demo.sayTerus' );
print_r($test);
IV. Lý do không còn nên sử dụng XMLRPC
Sự phát triển không ngừng của công nghệ đã khiến XMLRPC trở nên lỗi thời và tiềm ẩn nhiều rủi ro bảo mật. Vì vậy, việc chuyển đổi sang các giải pháp hiện đại hơn là điều cần thiết để đảm bảo sự an toàn và hiệu quả của hệ thống.
XML-RPC tiềm ẩn nhiều rủi ro bảo mật, khiến website dễ bị tấn công bởi hacker. Các cuộc tấn công như brute-force vào mật khẩu hoặc DDoS có thể xảy ra thường xuyên, gây ảnh hưởng nghiêm trọng đến hoạt động của website.
Nhằm ngăn chặn các cuộc tấn công từ hacker qua lỗ hổng XML-RPC, người dùng WordPress thường vô hiệu hóa tính năng này.
Cách mà Wordpress đã làm để khắc phục nhược điểm này của XMLRPC
WordPress API hiện đang trong giai đoạn thử nghiệm và phát triển. Với chức năng tương tự XML-RPC, API này hứa hẹn sẽ mở ra nhiều khả năng mới cho việc tùy chỉnh và mở rộng WordPress.
Với sự cải tiến và xuất hiện của API, tôi tin rằng sẽ là sự thay thế hoàn hảo cho XMLRPC, khắc phục được toàn bộ nhược điểm của XMLRPC
V. Nhận biết XMLRPC.PHP đang bị tấn công
Như tôi đã có đề cập cho bạn là XMPRPC rất dễ bị tấn công và cách nhận biết dễ nhất là bạn kiểm tra tập tin access_log. Sự gia tăng đột biến lượt truy cập, đặc biệt là từ các IP lạ, có thể là dấu hiệu cho thấy website đang bị tấn công qua lỗ hổng XML-RPC.
Ví dụ như:
- xxx.xxx.xxx.xxx - - [15/Jan/2025:10:34:49 +0700] "POST /xmlrpc.php HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"
- xxx.xxx.xxx.xxx - - [15/Jan/2025:10:34:50 +0700] "POST /xmlrpc.php HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"
- xxx.xxx.xxx.xxx - - [15/Jan/2025:10:34:50 +0700] "POST /xmlrpc.php HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"
- xxx.xxx.xxx.xxx - - [15/Jan/2025:10:34:51 +0700] "POST /xmlrpc.php HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"
- xxx.xxx.xxx.xxx - - [15/Jan/2025:10:34:51 +0700] "POST /xmlrpc.php HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"
- xxx.xxx.xxx.xxx - - [15/Jan/2025:10:34:52 +0700] "POST /xmlrpc.php HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8
Để giải quyết tình trạng này, một phương pháp hữu hiệu nhất chính là vô hiệu hóa XMLRPC đi. Vì khi cài đặt WordPress, XMLRPC đã được cài đặt sẵn nên người dùng cần thực hiện một vài thao tác để tắt nó đi. Trên thực tế, có rất nhiều cách để tiến hành vô hiệu hóa giao thức này.
VI. Cách tắt XMLRPC
1. Vô hiệu XMLRPC.PHP bằng Plugins
- Truy cập WordPress dashboard
- Di chuyển đến mục Plugins -› Add New Disable XMLRPC -› plugin Disable XMLRPC
- Kích hoạt plugin Disable XMLRPC để vô hiệu hoá XMLRPC
Việc vô hiệu hóa XML-RPC bằng plugin có thể gây ra xung đột với các plugin khác, dẫn đến tình trạng website hoạt động không ổn định hoặc thậm chí ngừng hoạt động.
Để giải quyết tình trạng này, bạn có thể sử dụng phương pháp sau:
- Stop XMLRPC Attack: để ngưng XMLRPC nhưng vẫn cho phép các plugin như Jetpack… tự động truy cập vào file xmlrpc.php.
- Control XMLRPC Publishing: công cụ tự động kích hoạt hoặc vô hiệu hoá xmlrpc.php.
- Themes Security: Bạn có thể tắt tại mục Security -> Settings -> WordPress Tweak và chọn Disable XML-RPC.
Cách 2: Sửa .htaccess
- Bước 1: Truy cập tập tin .htaccess ở thư mục gốc của trang we
- Bước 2: Chèn đoạn code sau vào tệp tin:
# DISABLE XML RPC
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
#END
Cách 3: Trên NGINX
- Bước 1: Truy cập tập tin cấu hình domain trên NGINX
- Bước 2: Chèn đoạn code sau vào tệp tin trên:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
- Bước 3: Chọn service nginx restart để khởi động lại NGINX
An ninh mạng là vấn đề tối quan trọng, đặc biệt khi sử dụng XML-RPC. Để bảo vệ website WordPress, người dùng nên vô hiệu hóa tính năng này khi không cần thiết và tăng cường các biện pháp bảo mật khác.
FAQ - Giải đáp thêm về XML - RPC
1. Giao thức này có phổ biến không?
XML-RPC từng là một giao thức phổ biến trong WordPress nhưng hiện nay đã giảm tầm quan trọng do sự xuất hiện của các công nghệ mới. Các vấn đề về bảo mật và hiệu suất cũng khiến nhiều người dùng tắt tính năng này.
2. Các cách để bảo mật?
Để bảo vệ website WordPress khỏi các cuộc tấn công, việc vô hiệu hóa hoặc hạn chế quyền truy cập vào file xmlrpc.php là điều cần thiết. Bạn có thể thực hiện điều này bằng cách sử dụng các plugin chuyên dụng như "Control XMLRPC publishing", "Disable XML-RPC" hoặc bằng cách chỉnh sửa file .htaccess.
3. Các plugin hỗ trợ bảo mật ?
Một số plugin hỗ trợ bảo mật như sau:
- Control XMLRPC publishing
- Disable XML-RPC
- Disable XML-RPC Pingback
- Stop XML-RPC Attack
- REST XML-RPC Data Checke
4. Kích hoạt XMLRPC trên WordPress
Vào Settings > Write > Bật Remote publishing with XML-RPC. Lưu lại để bắt đầu sử dụng các ứng dụng bên ngoài quản lý WordPress nhé!