Hướng dẫn php_extension xmlrpc

XMLRPC.PHP là một tính năng quan trọng trong truyền tải dữ liệu WordPress từ xa. Những năm trở lại đây, file XMLRPC.PHP bị lạm dụng và hình thành một lỗ hổng bảo mật rất lớn. Do đó, bài viết hôm nay, Vietnix sẽ giúp bạn tìm hiểu XMLRPC.PHP là gì? Lý do vì sao chúng ta nên vô hiệu hóa trong WordPress?

Nội dung chính

  • XMLRPC.PHP là gì?
  • Tại sao XML-RPC trước đó từng thông dụng và nó được sử dụng làm gì?
  • Cách kích hoạt XMLRPC.PHP trong WordPress
  • Vì sao nên vô hiệu hóa XMLRPC.PHP?
  • Cách vô hiệu hóa XMLRPC.PHP
  • Cách 1: Sử dụng plugin
  • Cách 2: Sửa file .htaccess
  • Cách 3: Trên NGINX
  • WordPress XMLRPC.PHP Server là gì?
  • Cách tạo hàm XMLRPC mới
  • Cách xóa hàm RPC
  • Tìm hiểu thêm về XMLRPC Client
  • Tạo lớp xử lý gọi hàm từ XMLRPC.PHP Server
  • Gọi hàm RPC
  • Lời kết

XMLRPC.PHP là gì?

XMLRPC.PHP là một tính năng giúp bạn đăng bài lên blog WordPress từ xa. Thông qua các ứng dụng bên ngoài như Windows Live Writer, IFTTT,… với HTTP làm công cụ truyền và XML làm công cụ encode (mã hóa).

Hướng dẫn php_extension xmlrpc

XMLRPC.PHP là gì?

Tại sao XML-RPC trước đó từng thông dụng và nó được sử dụng làm gì?

Nhờ vào việc sở hữu nhiều tính năng đặc biệt mà nhiều năm trước XML-RPC được sử dụng khá phổ biến. Tính năng nổi bật nhất phải kể đến đó là khả năng truy cập, chỉnh sửa nội dung trong WordPress.

Tính năng nổi bật nhất phải kể đến đó là khả năng truy cập, chỉnh sửa nội dung trong WordPress

Thời bấy giờ, đường truyền mạng chưa phổ biến và cũng chưa mạnh thì sử dụng XML-RPC là một giải pháp rất hữu dụng. Vì với XML-RPC, người dùng hoàn toàn có thể truy cập, chỉnh sửa nội dung mà không cần kết nối Internet.

Cụ thể, tính năng này của XML-RPC sẽ tạo ra một website offline, kết nối với website chính. Người dùng có thể thực hiện chỉnh sửa và đăng tải nội dung lên đây. Sau đó, chỉ cần kích hoạt XMLRPC.PHP thì những thông tin hay bài viết sẽ xuất hiện trên website.

Ngày nay, với sự phát triển của Internet cũng như sự ra đời của hàng loạt ứng dụng cho phép người dùng truy cập website bằng điện thoại, khiến XML-RPC ngày càng ít được sử dụng.

Cách kích hoạt XMLRPC.PHP trong WordPress

Để kích hoạt XMLRPC.PHP trong WordPress, bạn thực hiện theo các bước sau đây:

  • Bước 1: Cài đặt plugin có tên “Control XMLRPC publishing”.
  • Bước 2:  Trên WordPress, bạn chọn Settings > Chọn tiếp Write > Chọn tiếp Remote publishing with XMLRPC > Sau cùng, chọn Enabled.
  • Bước 3: Nhấn Save changes để hệ thống lưu lại thay đổi. Như vậy là đã hoàn tất việc kích hoạt XMLRPC.PHP.

Vì sao nên vô hiệu hóa XMLRPC.PHP?

Hiện nay, XML-RPC bắt đầu xuất hiện hạn chế, song song với đó là sự xuất hiện của những phần mềm mới, khiến cho XML-RPC không còn được khuyên dùng. 

Nhược điểm lớn nhất của XML-RPC là vấn đề bảo mật kém. Điều này tạo cơ hội cho các hacker có thể dễ dàng tấn công vào website. Hacker sẽ tận dụng lỗ hổng bảo mật của file XMLRPC.PHP để truy cập website bằng cách sử dụng nhiều tổ hợp của username và password. 

Người dùng thường thực hiện vô hiệu hoá XMLRPC.PHP để tránh tình trạng bị hacker xâm nhập

Ngoài ra, hacker còn phát động các cuộc tấn công DDoS vào website khiến nó thường xuyên rơi vào tình trạng bị down. 

Chính vì vậy, khi sử dụng WordPress, nhiều người dùng thường thực hiện vô hiệu hoá XMLRPC.PHP để tránh tình trạng bị hacker xâm nhập.

Cách vô hiệu hóa XMLRPC.PHP

Để vô hiệu hóa XMLRPC.PHP, bạn có thể thực hiện theo 3 cách sau đây:

Cách 1: Sử dụng plugin

  • Bước 1: Truy cập vào giao diện WordPress.
  • Bước 2: Di chuyển đến mục Plugins > Nhấp vào Add New và search Disable XMLRPC > Cài đặt Plugin như hình bên dưới:

Sử dụng plugin để vô hiệu hóa

Khi được kích hoạt, plugin này sẽ tự động chạy code cần thiết để tắt Xmlrpc.

Trong trường hợp bạn đang sử dụng plugin Jetpack hoặc một số plugin khác đang dùng yếu tố của xmlrpc, bạn có thể cài thêm các plugin sau để giải quyết tình trạng này:

  • Cài đặt plugin Stop XMLRPC Attack để ngưng Xmlrpc nhưng vẫn cho phép các plugin như Jetpack..v.v tự động truy cập vào file XMLRPC.PHP.
  • Cài đặt plugin Control XML-RPC Publishing để cho phép kiểm soát và sử dụng công cụ xuất bản từ xa bằng XMLRPC.PHP.
  • Cài đặt plugin iThemes Security vì đã có tích hợp sẵn chức năng chặn XML-RPC và chặn Pingback, bạn có thể bật lên tại mục Security > Settings > WordPress Tweak và chọn Disable XML-RPC.

Cách 2: Sửa file .htaccess

Bạn có thể chặn tất cả các yêu cầu tới file XMLRPC.PHP bằng cách sử dụng .htaccess, dán đoạn mã sau vào file .htaccess của bạn:

# Block WordPress xmlrpc.php requests (vietnix)

order deny,allow
deny from all
allow from x.x.x.x

Bạn cũng có thể thêm vào allow from để cho phép tính năng XML-RPC vẫn hoạt động nếu kết nối từ địa chỉ IP đó.

Cách 3: Trên NGINX

Nếu bạn đang sử dụng Nginx làm backend (sử dụng cùng với PHP-FPM) thì cần thêm rule sau vào file vhost của website:

location ~ xmlrpc.php { 
deny all; 
access_log off; 
log_not_found off; 

WordPress XMLRPC.PHP Server là gì?

XMLRPC server chính là một web server và có nhiệm vụ nhận thông tin đã được mã hoá từ XMLRPC client.

Cách tạo hàm XMLRPC mới

Để tạo hàm  XMLRPC mới, bạn thao tác theo ví dụ sau đây:

add_filter( 'xmlrpc_methods', 'add_xml_rpc_methods' );
function add_xml_rpc_methods( $methods ) {
$methods['frs.helloWorld'] = 'hello_world'; //Where frs.helloWorld is the XML-RPC method name, and hello_world is the callback, namespace 'frs' for any you want.
return $methods;
}

Trong ví dụ vừa trình bày ở trên, bạn tạo hàm helloWorld thuộc namespace mới frs. Khai báo lời gọi hàm callback hello_world đối với hàm helloWorld.

Về phần định nghĩa hàm callback. Bạn có thể tham khảo ví dụ:

function hello_world($params){
global $wp_xmlrpc_server;
$arg1 = $params[1];
return "Hello ".$wp_xmlrpc_server->escape( $arg1 );
}

Lưu ý: Cần phải trả hàm về giá trị, giá trị này sẽ được lấy trong quá trình gọi hàm. Khi xuất chuỗi ra màn hình lưu ý không dùng echo, print.

Cách xóa hàm RPC

Thực hiện tương tự như cách tạo mới ở trên. Với các hàm không mong muốn, bạn chỉ cần sử dụng xmlrpc_methods để xóa. Thêm vào functions.php

function mynamespace_remove_xmlrpc_methods( $methods ) {
unset( $methods['demo.addTwoNumbers'] );
unset( $methods['frs.helloWorld'] );
return $methods;
}
add_filter( 'xmlrpc_methods', 'mynamespace_remove_xmlrpc_methods');

Tìm hiểu thêm về XMLRPC Client

XMLRPC client chính là hệ thống dùng XML để mã hóa tham số, sau đó thực hiện gửi nội dung XML đã được mã hoá vào XMLRPC server.

Tạo lớp xử lý gọi hàm từ XMLRPC.PHP Server

Để tạo lớp xử lý gọi hàm từ XMLRPC.PHP Server, bạn cần thực hiện theo các bước sau đây:

  • Bước 1: Đầu tiên, bạn cần kết nối với XMLRPC Server.
  • Bước 2: Tiến hành tạo lớp XMLRPC_Client với nội dung có sẵn sau:
/*create XML-RPC PHP client*/
class XMLRPC_Client {
 
  private $url;
 
  function __construct( $url ) {
    $this->url = $url;
  }
 
  /**
   * Call the XML-RPC method named $method and return the results, or die trying!
   *
   * @param string $method XML-RPC method name
   * @param mixed ... optional variable list of parameters to pass to XML-RPC call
   *
   * @return array result of XML-RPC call
   */
  public function call() {
 
    // get arguments
    $params = func_get_args();
    $method = array_shift( $params );
 
    $post = xmlrpc_encode_request( $method, $params );
 
    $ch = curl_init();
 
    // set URL and other appropriate options
    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 );
 
    // issue the request
    $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 );
 
    // check for curl errors
    if ( $curl_errorno != 0 ) {
      die( "Curl ERROR: {$curl_errorno} - {$curl_error}n" );
    }
 
    // check for server errors
    if ( $response_code != 200 ) {
      die( "ERROR: non-200 response from server: {$response_code} - {$response}n" );
    }
 
    return xmlrpc_decode( $response );
  }
}

Gọi hàm RPC

Để gọi hàm RPC, bạn cần thực hiện theo các bước như sau:

  • Bước 1: Đầu tiên, bạn cần kết nối tới XMLRPC Server.
  • Bước 2: Sau đó, bạn truy cập XMLRPC_Client.
  • Bước 3: Tiến hành tạo instance trên XMLRPC_Client.
  • Bước 4: Sử dụng hàm “//call method” để gọi hàm.
//call method
$client = new XMLRPC_Client( "http://127.0.0.1:81/wordpress/xmlrpc.php" );
$available_methods = $client->call( 'system.listMethods' );
print_r( $available_methods );

Với XMLRPC, bạn có thể thực hiện gọi nhiều hàm trên một kết nối XMPRPC. Trong trường hợp này, bạn có thể gọi tiếp hàm demo.sayHello như sau:

$test= $client->call( 'demo.sayHello' );
print_r($test);

Lời kết

Trên đây là những thông tin chia sẻ về vấn đề XMLRPC.PHP là gì. Hy vọng bài viết sẽ giúp bạn hiểu được khái niệm XMLRPC.PHP cũng như nguyên nhân tại sao bạn nên vô hiệu hóa trong WordPress. Nếu còn vấn đề gì chưa rõ, bạn có thể bình luận bên dưới để được hỗ trợ nhé!