Hướng dẫn Vô hiệu hóa XML-RPC của WordPress

wordpress-xml-rpc.png

XML-RPC là một giao thức kết nối từ xa, được sử dụng mặc định trên WordPress. Giao thức này dùng XML để mã hóa và HTTP để truyền tải dữ liệu. WordPress sử dụng XML-RPC để giao tiếp với những ứng dụng khác, bao gồm cả thiết bị di động và những websites khác.

Khi internet còn chưa phổ biến, với tính năng này, chúng ta có thể thay đổi content ngay cả khi không có kết nối internet. Cùng với sự phát triển của công nghệ, XML-RPC dần mất đi tầm ảnh hưởng. Nó thậm chí còn trở thành công cụ để kẻ xấu thực hiện những cuộc tấn công nhằm vào những websites sử dụng WordPress. Hãy vô hiệu hóa XML-RPC nếu như website không sử dụng tính năng này để bảo mật WordPress tốt hơn.

Vì sao chúng ta nên tắt XML-RPC?

Ở thời điểm hiện tại, XML-RPC đã không còn quan trong đối với website WordPress. Việc vô hiệu hóa tính năng này cũng không làm ảnh hưởng gì đến trang web. Tuy nhiên, nếu như để XML-RPC hoạt động mặc định sẽ tồn tại những rủi ro bảo mật, có thể kể đến:
  • Brute Force - XML-RPC không có những giới hạn đăng nhập như cách bình thường. Kẻ xấu sẽ lợi dụng điểm này để thử những tổ hợp mật khẩu nhằm chiếm đoạt quyền kiểm soát website.
  • DDoS - Kẻ xấu sẽ tận dụng tính năng pingback của XML-RPC để gửi đến lượng lớn traffic đến website. Hosting sẽ bị quá tải, website sẽ chậm hoặc thậm chí không truy cập được.
Tất nhiên là vẫn còn một số plugins cần XML-RPC, mà ví dụ điển hình nhất là Jetpack. Để đảm bảo website hoạt động bình thường, các bạn cần kiểm tra kĩ xem có plugins nào đang dùng cần XML-RPC không. Nếu như có thì có thể tăng cường bảo mật thay vì tắt hoàn toàn.

Vô hiệu hóa XML-RPC

XML-RPC trên WordPress được sử dụng thông qua file xmlrpc.php. Đa số các plugins bảo mật đều sẽ vô hiệu hóa hoặc tăng cường bảo mật đối với file này. Tuy nhiên, đây không là cách tối ưu nhất vì các requests đến file xmlrpc.php vẫn sẽ đến máy chủ và PHP.

CloudFlare

Đối với những website sử dụng CloudFlare thì đây có thể xem như là giải pháp tốt nhất, requests đến file xmlrpc.php sẽ không thể đến với máy chủ nên không gây tiêu tốn tài nguyên. Các bạn vào CloudFlare => Tên miền cần bảo vệ => Security => Firewall rules => Create firewall rule, tạo rule theo mẫu dưới.
cloudflare-block-xmlrpc.php.png


Trong trường hợp các bạn sử dụng plugin cần XML-RPC, có thể tùy biến cho phép danh sách địa chỉ IP có thể truy cập vào file xmlrpc.php, như bên dưới là với plugin Jetpack.
cloudflare-block-xmlrpc.php-jetpack-excluded.png

Danh sách IP cần whitelist của Jetpack ở đây. Lâu lâu nên kiểm tra danh sách IP này để tránh trường hợp Jetpack thay đổi IP khiến plugin không hoạt động bình thường. Bạn nào lười nhập thì có thể dùng expression dưới đây:
Code:
(http.request.uri.path contains "xmlrpc.php" and not ip.src in {192.0.64.0/24 192.0.65.0/24 192.0.66.0/24 192.0.67.0/24 192.0.68.0/24 192.0.69.0/24 192.0.70.0/24 192.0.71.0/24 192.0.72.0/24 192.0.73.0/24 192.0.74.0/24 192.0.75.0/24 192.0.76.0/24 192.0.77.0/24 192.0.78.0/24 192.0.79.0/24 192.0.80.0/24 192.0.81.0/24 192.0.82.0/24 192.0.83.0/24 192.0.84.0/24 192.0.85.0/24 192.0.86.0/24 192.0.87.0/24 192.0.88.0/24 192.0.89.0/24 192.0.90.0/24 192.0.91.0/24 192.0.92.0/24 192.0.93.0/24 192.0.94.0/24 192.0.95.0/24 192.0.96.0/24 192.0.97.0/24 192.0.98.0/24 192.0.99.0/24 192.0.100.0/24 192.0.101.0/24 192.0.102.0/24 192.0.103.0/24 192.0.104.0/24 192.0.105.0/24 192.0.106.0/24 192.0.107.0/24 192.0.108.0/24 192.0.109.0/24 192.0.110.0/24 192.0.111.0/24 192.0.112.0/24 192.0.113.0/24 192.0.114.0/24 192.0.115.0/24 192.0.116.0/24 192.0.117.0/24 192.0.118.0/24 192.0.119.0/24 192.0.120.0/24 192.0.121.0/24 192.0.122.0/24 192.0.123.0/24 192.0.124.0/24 192.0.125.0/24 192.0.126.0/24 192.0.127.0/24})

Web server

Khi chặn xmlrpc.php ở web server level, requests vẫn đến máy chủ nhưng sẽ bị chặn bởi Apache, NGIИX, LiteSpeed. PHP cũng sẽ không thực thi những requests này nên tài nguyên tiêu tốn là rất ít.

Với máy chủ sử dụng Apache / Litespeed, thêm vào .htaccess:
Code:
<Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
</Files>
Nếu như muốn cho phép địa chỉ IP có thể gửi requests đến xmlrpc.php, có thể thêm như dưới:
Code:
<Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
    Allow from xxx.xxx.xxx.xxx
</Files>

Với máy chủ sử dụng NGIИX, thêm vào file .conf:
Code:
location = /xmlrpc.php {
    deny all;
}
Để mở xmlrpc.php cho một số địa chỉ IP, có thể dùng:
Code:
location = /xmlrpc.php {
    allow 192.0.64.0/18;
    allow 64.34.206.0/24;
    allow 198.181.116.0/22;
    allow 66.155.105.128/26;
    allow 69.90.253.0/24;
    allow 76.74.248.128/25;
    allow 76.74.255.0/25;
    allow 2001:1978:1e00:3::/64;
    allow 2620:115:c000::/40;
    deny all;
}

Trên đây chỉ là mẫu, các bạn phải tự thêm và cập nhật IP cần mở. Với NGIИX hay Openlitespeed thì sẽ cần restart lại web server khi thay đổi .conf hay .htaccess.

Plugins

Hầu hết các plugins bảo mật đều có tính năng vô hiệu hóa hoặc tăng cường bảo mật đối với XML-RPC. Các bạn có thể tìm kiếm chúng ở cài đặt của plugin.

Tổng kết

Dù là một tính năng mặc định, nhưng XML-RPC lại không có nhiều hữu ích đối với WordPress. Thậm chí nó còn để lại nguy cơ bảo mật cùng lỗ hổng để kẻ xấu lợi dụng tấn công DDoS. Nếu như website không sử dụng XML-RPC thì việc vô hiệu hóa nó là điều nên làm. Trong trường hợp cần XML-RPC thì hãy tăng cường bảo mật đối với file xmlrpc.php.
 

Chủ đề tương tự

Trending threads

Top