10 Feb

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

  1. Cài plugin “Control XMLRPC publishing
  2. Trên WordPress, chọn Settings ->Write -> Remote publishing with XMLRPC -> Enabled
  3. 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 phải được thiết kế để mang lại một kết quả nhất định. Để truyền giá trị ra ngoài, hãy sử dụng câu lệnh return thay vì in nó trực tiếp trên màn hình. Việc xóa hàm RPC sử dụng hàm xmlrpc_methods là giống như việc tạo hàm.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

  1. Kết nối tới XMLRPC Server
  2. Truy cập XMLRPC_Client
  3. Tạo instance trên XMLRPC_Client
  4. 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ự tiến bộ công nghệ không ngừng đã khiến XMLRPC trở nên lỗi thời và gây nguy hiểm bảo mật. Do đó, để đảm bảo sự hiệu quả và an toàn của hệ thống, cần phải chuyển sang các giải pháp hiện đại hơn.XML-RPC có nhiều vấn đề bảo mật khiến hacker có thể hack website. Các cuộc tấn công như brute-force vào mật khẩu hoặc DDoS thường xảy ra, có thể ảnh hưởng đến hoạt động của website.Người dùng WordPress thường vô hiệu hóa tính năng này để ngăn chặn các cuộc tấn công bảo mật thông qua lỗ hổng XML-RPC.

Cách mà Wordpress đã làm để khắc phục nhược điểm này của XMLRPC

Hiện tại, API của WordPress đang được thử nghiệm và phát triển. API này được cho là sẽ cung cấp nhiều khả năng mới cho việc tùy chỉnh và mở rộng WordPress vì nó có chức năng giống như XML-RPC.Với những cải tiến và xuất hiện của API, tôi tin rằng nó sẽ là một sự thay thế tuyệt vời cho XMLRPC, giải quyết tất cả những nhược điểm của XMLRPC.

V. Nhận biết XMLRPC.PHP đang bị tấn công

Như tôi đã đề cập cho bạn, XMPRPC rất dễ bị tấn công. Cách dễ nhất để xác định nó là 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 của một cuộc tấn công XML-RPC xảy ra trên trang web.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, việc vô hiệu hóa XMLRPC là cách tốt nhất. Người dùng phải thực hiện một số bước để tắt XMLRPC sau khi cài đặt WordPress. Có rất nhiều cách khác nhau để 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

  1. Truy cập WordPress dashboard 
  2. Di chuyển đến mục Plugins -› Add New Disable XMLRPC -› plugin Disable XMLRPC
  3. Kích hoạt plugin Disable XMLRPC để vô hiệu hoá XMLRPC

Việc vô hiệu hóa XML-RPC thông qua một plugin có thể dẫn đến xung đột với các plugin khác và dẫn đến tình trạng website 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,AllowDeny 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é!

Comments
* The email will not be published on the website.
I BUILT MY SITE FOR FREE USING