Trang chủ WordpressHướng dẫn Wordpress Hãy tắt XML-RPC khi không cần sử dụng

Hãy tắt XML-RPC khi không cần sử dụng

bởi Thạch Phạm
30 bình luận 4908 views
Khuyến mãi hosting

Khi sử dụng WordPress, chắc hẳn nếu ai đã từng mở mã nguồn xem đều thấy tập tin xmlrpc.php nằm ở thư mục gốc mã nguồn. XML-RPC là một script được sử dụng trong WordPress kể từ các phiên bản trước nhưng từ phiên bản 3.5 nó đã được bật lên mặc định.

XML-RPC là một giao thức kết nối với website WordPress từ xa sử dụng XML để trao đổi dữ liệu qua lại. Hiện tại có thể hỗ trợ các API của các CMS như WordPress API, Blogger API, Movable API, Pingback API, MetaWeblog API,…

Thông thường trên WordPress, chúng ta sẽ sử dụng đến XML-RPC khi thiết lập đăng bài từ một ứng dụng khác bên ngoài như Windows Live Writer, hoặc các dịch vụ kết nối với website để đăng bài như IFTTT chẳng hạn.

Nhưng từ khi XML-RPC được sử dụng phổ biến trên WordPress, nó lại làm dấy lên về nguy cơ bị tấn công brute force attack để dò mật khẩu hoặc nặng hơn là gửi một lượng lớn request đến máy chủ để làm tê liệt máy chủ, hình thức tấn công này được gọi là HTTP Flood Attack, là một kiểu tấn công DDoS.

Thống kê tần suất tấn công qua XMLRPC trên WordPress của Sucuri.

Thống kê tần suất tấn công qua XMLRPC trên WordPress của SucuriBài viết gốc

Việc tấn công website WordPress dựa vào XML-RPC không phải là mới, nhưng trong 1 tuần trở lại đây mình thấy khá nhiều người bị tấn công theo hình thức này, theo ghi nhận của mình trên các khách hàng sử dụng dịch vụ hosting tại AZDIGI.

Do đó, hiện tại nếu bạn không có nhu cầu kết nối WordPress đến các dịch vụ hoặc ứng dụng bên ngoài thì hãy vô hiệu hóa XML-RPC để tránh được nguy cơ tấn công theo hình thức này.

Cách nhận biết website đang bị tấn công

Một cách đơn giản nhất để biết website mình có đang bị tấn công theo hình thức này hay không là mở tập tin access_log lên xem. Nếu bạn thấy có lượng lớn lượt truy cập như dưới đây thì website bạn đang bị tấn công thông qua XML-RPC.

xxx.xxx.xxx.xxx - - [15/Sep/2016:12:54: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/Sep/2016:12:54: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/Sep/2016:12:54: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/Sep/2016:12:54: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/Sep/2016:12:54: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/Sep/2016:12:54:52 +0700] "POST /xmlrpc.php HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8

Cách hạn chế tấn công thông qua XMLRPC

Để hạn chế tấn công theo hình thức này thì có một cách đơn giản nhất là chặn tập tin này không cho thực thi. Lưu ý các bạn không nên xóa đi vì nó là một phần của mã nguồn WordPress, có thể gây lỗi hoặc khi cập nhật phiên bản nó sẽ có lại nên chặn là cách tối ưu nhất.

Chặn xmlrpc.php trên .htaccess

Nếu bạn dùng Shared Host hoặc các server cài đặt Apache thì chèn đoạn sau vào tập tin .htaccess ở thư mục gốc của website.

<files xmlrpc.php>
 order allow,deny
 deny from all
</files>

Chặn xmlrpc.php 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ì bỏ đoạn sau vào tập tin cấu hình domain trên NGINX.

location = /xmlrpc.php {
 deny all;
 access_log off;
 log_not_found off;
}

Sau đó khởi động lại NGINX.

service nginx restart

Chặn xmlrpc.php bằng plugin iThemes Security

Nếu bạn không tiện làm 2 cách trên thì dùng tính năng có sẵn của iThemes Security là việc dễ dàng nhất.

Plugin bảo mật này hầu như là một plugin phải cài khi sử dụng WordPress rồi, nếu bạn chưa cài plugin này thì hãy cài ngay theo hướng dẫn này. Trong plugin này đã có tích hợp sẵn chức năng chặn XML-RPC và chặn Pingback (nên tắt luôn nếu không cần), bạn có thể bật lên tại mục Security -> Settings -> WordPress Tweak và chọn Disable XML-RPC.

ithemes-security-block-xmlrpc

Chặn XML-RPC trên plugin iThemes Security.

Nếu bạn dùng NGINX thì sau khi đánh dấu vào tùy chọn này sẽ cần khởi động lại NGINX nhé.

Lời kết

Mặc dù mã nguồn WordPress là một trong những mã nguồn phổ biến và có độ an toàn tốt nhưng một vài tính năng trong mã nguồn có thể sử dụng sai mục đích nên hãy thường xuyên theo dõi log lỗi (error log) hoặc log truy cập (access log) để sớm phát hiện những hành vi bất thường. Nếu bạn không chắc chắn website mình có an toàn hay không thì mình khuyến cáo sử dụng dịch vụ Sucuri Firewall để bảo mật website tốt hơn.

30 bình luận

Có thể bạn quan tâm

30 bình luận

Quan Nguyen 12/09/2020 - 12:38 Chiều

rất cảm ơn anh đã chia sẻ, thật sự rất hay và bổ ích ak.
Sun Grand City New An Thới

Reply
Thucle Blog 23/06/2017 - 11:04 Sáng

đúng thứ mình đang tìm. áp dụng ngay và chờ kết quả xem sao

Reply
sữa havit 12/06/2017 - 6:54 Chiều

cảm ơn bác thạch

Reply
nam2c 04/01/2017 - 1:39 Sáng

Đã bị may nhờ bài viết của anh thank you very much ahihi

Reply
evaair 05/12/2016 - 5:30 Chiều

Bài viết chi tiết thank bạn

Reply
Dự án MHD Trung Văn 04/12/2016 - 7:21 Chiều

Bài viết hay cảm ơn thạch

Reply
Van Luu 04/12/2016 - 1:18 Sáng

quầy, nguy hiểm vãi, cảm ơn bạn nhiều!

Reply
Việc làm cần tuyển dụng gấp 01/12/2016 - 4:21 Chiều

Cảm ơn a thạch nhé . giờ e mới biết cái này ^^

Reply
son 30/11/2016 - 2:22 Chiều

anh thạch cho em hỏi: tắt XML-RPC thì em dùng plugin NextScripts: Social Networks Auto-Poster thì có bị ảnh hưởng k ạ. vẫn chạy tốt plugin chứ ạ

Reply
Thạch Phạm 30/11/2016 - 10:39 Chiều

Cái này anh không chắc nữa nhưng nếu anh không lầm thì cái plugin kia chỉ post lên mạng xã hội qua API chứ không phải qua XML RPC.

Reply
gamek 25/11/2016 - 11:06 Sáng

cảm ơn bác thạch phạm ạ

Reply
Chung cư One18 24/11/2016 - 2:27 Sáng

hay quá thạch ơi

Reply
phân tích cổ phiếu 20/11/2016 - 10:53 Chiều

bài viết rất hay, rất hữu ích. cảm ơn bạn

Reply
MHD Trung Văn 20/11/2016 - 8:46 Chiều

cảm ơn thạch nhiều.

Reply
Ninh 12/11/2016 - 10:05 Chiều

Mình áp dụng cách này, đổi tên file xmlprc.php thành tên khác thì cũng chặn đc thì phải.

Reply
Abc 15/10/2016 - 6:50 Chiều

test

Reply
bxb 09/10/2016 - 12:47 Sáng

gsdgsdgsdg

Reply
tới 03/10/2016 - 7:03 Chiều

xin hỏi anh phạm là VPS TẠI CÔNG TY A bán là hosting phải không a?

Reply
Cong pho 29/09/2016 - 2:51 Chiều

của mình cài trên host plesk vậy tắt đi kiểu nào vậy thạch phạm, ko hỗ trợ .htaccess

Reply
Thạch Phạm 30/09/2016 - 8:18 Sáng

Tắt bằng cách chèn code PHP như trong bài mình có đề cập nhé.

Reply
Andre 23/09/2016 - 9:28 Sáng

cam on ban nhieu

Reply
Ty san 21/09/2016 - 10:39 Chiều

Cảm ơn Thạch Phạm nhiều.

Reply
Bằng 20/09/2016 - 1:04 Chiều

Cảm ơn Thạch Phạm nhiều. Nhờ là một khách hàng của AZDIGI, mình đã nhận mail của công ty bạn và đã giải quyết được vấn đê. TUYỆT!

Reply
Thiện 19/09/2016 - 8:54 Chiều

Hay! Cảm ơn anh!

Reply
Thạch Phạm 03/10/2016 - 10:36 Chiều

Cảm ơn bạn

Reply
Chu Tuấn 19/09/2016 - 3:16 Chiều

Thêm vào đoạn nào vậy Thạch, mình bỏ vào thì ko restart lại được nginx

Reply
Duc Bui 19/09/2016 - 10:44 Sáng

Code trong htaccess
<FilesMatch "(wp-login|xmlrpc).php$">
SetEnvIf X-FORWARDED-FOR 27.72.103.105 allow
SetEnvIf X-FORWARDED-FOR 113.191.253.34 allow
Allow from 27.72.103.105
Allow from 113.191.253.34
order deny,allow
deny from all
allow from env=allow
</FilesMatch>

Reply
Duc Bui 19/09/2016 - 10:41 Sáng

Chào Thạch! mình cũng muốn chia sẻ việc kết hợp việc chặn IP truy cập và VPN để đảm bảo an toàn hơn cho các file quan trọng. Code thêm vào htaccess như sau:

SetEnvIf X-FORWARDED-FOR 27.72.103.105 allow
SetEnvIf X-FORWARDED-FOR 113.191.253.34 allow
Allow from 27.72.103.105
Allow from 113.191.253.34
order deny,allow
deny from all
allow from env=allow

Reply
Duc Bui 19/09/2016 - 10:35 Sáng

Tut hay! Site mình cũng từng bị tấn công kiểu như này, và ap dụng chặn bằng htaccess là ổn. Ngoài file này cũng có thể ap dụng cho cả file wp-login.php

Reply
Lộc Đặng 19/09/2016 - 10:31 Sáng

Chào Thạch!
File access_log.txt mở ở đâu vậy? Làm sao để có được file này.
Thanks

Reply

Để lại một bình luận

* Khi bình luận, bạn đồng ý rằng thông tin bạn nhập vào bao gồm tên, email và địa chỉ IP sẽ được lưu giữ tại website.