Kết luận cho chủ doanh nghiệp
- 1
Trong 10,7 ngày, 47.956 trong 374.164 request tới mona.software, tức 12,8%, hỏi những tệp mà người xem bình thường không gọi: cửa đăng nhập, tệp cấu hình, tệp sao lưu, công cụ cơ sở dữ liệu và tệp PHP lạ. Số này đếm theo đường dẫn được hỏi, chưa biết ai hỏi.
- 2
Một nhóm chiếm phần lớn. XML-RPC nhận 34.051 request, 71,0% số dò quét, và riêng ngày 24/09 có 24.445 request, bằng 35,7% lượng truy cập cả ngày.
- 3
Cách trả lời quan trọng hơn cách đếm. Trước mốc 25/09 lúc 15:21, POST tới xmlrpc.php nhận mã 200 với một câu lỗi ngắn cố định; từ mốc, lớp bảo vệ trả 403 dài 75 byte ngay ở cửa. Request vẫn tiếp tục tới, nên thứ đổi là cách máy chủ trả lời.
Điểm chính: Trong 10,7 ngày, 12,8% request tới mona.software là dò quét, và 71,0% trong số đó nhắm vào xmlrpc.php.
1Mỗi ngày có bao nhiêu request dò quét
Bảng dưới là 11 ngày của bản trích log, tính theo giờ Việt Nam. Ngày 18/09 chỉ có dữ liệu từ 01:10 và ngày 28/09 chỉ đến 17:58, nên hai ngày này ngắn hơn. Cột «Dò quét» là số request hỏi một trong chín nhóm tệp ở phần sau.
| Ngày | Tổng request | Dò quét | Tỉ lệ | |
|---|---|---|---|---|
| 18/09 (từ 01:10) | 20.702 | 564 | 2,7% | |
| 19/09 | 21.040 | 928 | 4,4% | |
| 20/09 | 24.606 | 2.143 | 8,7% | |
| 21/09 | 26.666 | 5.979 | 22,4% | |
| 22/09 | 31.526 | 4.109 | 13,0% | |
| 23/09 | 32.012 | 2.299 | 7,2% | |
| 24/09 | 68.517 | 25.434 | 37,1% | |
| 25/09 | 40.728 | 1.136 | 2,8% | |
| 26/09 | 31.162 | 1.648 | 5,3% | |
| 27/09 | 40.468 | 2.126 | 5,3% | |
| 28/09 (đến 17:58) | 36.737 | 1.590 | 4,3% |
Ngày bình thường có khoảng 2.143 request dò quét (trung vị của 9 ngày đủ). Ngày 24/09 là ngày đỉnh: riêng xmlrpc.php nhận 24.445 request, bằng 35,7% lượng truy cập cả ngày. Những ngày liền kề thấp hơn nhiều, nên một website nhỏ có thể nhận một đợt dò dồn vào vài giờ.
2Chín nhóm dò quét và những đường dẫn hay gặp
MONA xếp mỗi request vào một nhóm theo đường dẫn được hỏi, kiểm lần lượt theo thứ tự trong bảng. Một request chỉ nằm ở một nhóm. Đường dẫn cho biết người hỏi muốn lấy gì, còn log không cho biết người đó là ai.
| Nhóm | Hỏi gì | Request | Tỉ lệ trong số dò quét | Đường dẫn hay gặp |
|---|---|---|---|---|
| XML-RPC | Tệp xmlrpc.php của WordPress, nơi thử đăng nhập hàng loạt | 34.051 | 71,0% | //xmlrpc.php, /xmlrpc.php, /blog/xmlrpc.php |
| Cửa đăng nhập | Cửa đăng nhập và quản trị: wp-login.php, /wp-admin/ | 5.046 | 10,5% | /wp-login.php, /wp-admin/index.php, /wp-admin/ |
| Tệp cấu hình bí mật | Tệp cấu hình và khoá bí mật: .env, .git, .aws, wp-config | 2.168 | 4,5% | /.env, /.git/config, /.env.local |
| Tệp sao lưu | Tệp sao lưu và dữ liệu: .sql, .zip, .bak, thư mục backup | 388 | 0,8% | /backup/, /old/, /backup.zip |
| Công cụ cơ sở dữ liệu | Công cụ quản trị cơ sở dữ liệu: phpMyAdmin, Adminer | 23 | 0,0% | /adminer.php, /dbadmin/, /adminer-4.8.1.php |
| Dò người dùng | Dò tên người dùng qua REST: /wp-json/wp/v2/users | 109 | 0,2% | /wp-json/wp/v2/users/me, /wp-json/wp/v2/users, //wp-json/wp/v2/users/ |
| Dò phiên bản plugin | Dò phiên bản plugin và giao diện: readme.txt, license | 174 | 0,4% | /wp-content/plugins/pods/readme.txt, /wp-content/plugins/forminator/readme.txt, /wp-content/plugins/no-existing-plugin-0265985a/readme.txt |
| Tệp lõi gọi trực tiếp | Tệp lõi WordPress gọi trực tiếp: wp-links-opml.php, wp-signup.php | 183 | 0,4% | /wp-content/index.php, /wp-mail.php, /wp-links-opml.php |
| Tệp PHP lạ | Tệp PHP lạ và lỗ hổng thường gặp: alfa.php, file.php, vendor/phpunit | 5.814 | 12,1% | /file.php, /goods.php, /txets.php |
XML-RPC chiếm 71,0% số request dò quét. Trong 33.991 request tới xmlrpc.php, gần như toàn bộ là POST, kiểu gọi dùng để thử nhiều mật khẩu trong một lần. Nhóm tệp PHP lạ đứng thứ hai với 5.814 request, tên tệp lặp lại giữa các ngày vì người quét chạy cùng một danh sách. Nhóm tệp lõi WordPress gọi trực tiếp chỉ có tệp thật của WordPress, nhưng người xem bình thường không bao giờ gõ thẳng tên các tệp này.
3Máy chủ trả lời gì trước và sau khi đổi lớp chặn
Mốc so sánh là 25/09 lúc 15:21, thời điểm POST tới xmlrpc.php lần đầu nhận mã 403 trong log. Trước mốc có 182,2 giờ dữ liệu, sau mốc có 74,6 giờ. «Từ chối hoặc không có» gồm các mã 401, 403, 404 và 405.
| Nhóm | Trước mốc | Từ mốc |
|---|---|---|
| XML-RPC | 31.682 request, 31.645 nhận mã 200, 37 bị từ chối hoặc không có, 0 chuyển hướng | 2.369 request, 0 nhận mã 200, 2.368 bị từ chối hoặc không có, 1 chuyển hướng |
| Cửa đăng nhập | 4.866 request, 2 nhận mã 200, 3.209 bị từ chối hoặc không có, 1.655 chuyển hướng | 180 request, 14 nhận mã 200, 163 bị từ chối hoặc không có, 3 chuyển hướng |
| Tệp cấu hình bí mật | 1.539 request, 3 nhận mã 200, 1.297 bị từ chối hoặc không có, 226 chuyển hướng | 629 request, 0 nhận mã 200, 618 bị từ chối hoặc không có, 9 chuyển hướng |
| Tệp sao lưu | 347 request, 3 nhận mã 200, 268 bị từ chối hoặc không có, 76 chuyển hướng | 41 request, 0 nhận mã 200, 41 bị từ chối hoặc không có, 0 chuyển hướng |
| Công cụ cơ sở dữ liệu | 21 request, 0 nhận mã 200, 20 bị từ chối hoặc không có, 1 chuyển hướng | 2 request, 0 nhận mã 200, 2 bị từ chối hoặc không có, 0 chuyển hướng |
| Dò người dùng | 106 request, 0 nhận mã 200, 106 bị từ chối hoặc không có, 0 chuyển hướng | 3 request, 0 nhận mã 200, 3 bị từ chối hoặc không có, 0 chuyển hướng |
| Dò phiên bản plugin | 166 request, 12 nhận mã 200, 152 bị từ chối hoặc không có, 2 chuyển hướng | 8 request, 0 nhận mã 200, 8 bị từ chối hoặc không có, 0 chuyển hướng |
| Tệp lõi gọi trực tiếp | 124 request, 64 nhận mã 200, 37 bị từ chối hoặc không có, 17 chuyển hướng | 59 request, 39 nhận mã 200, 13 bị từ chối hoặc không có, 7 chuyển hướng |
| Tệp PHP lạ | 3.330 request, 8 nhận mã 200, 3.314 bị từ chối hoặc không có, 8 chuyển hướng | 2.484 request, 0 nhận mã 200, 2.281 bị từ chối hoặc không có, 201 chuyển hướng |
XML-RPC là chỗ thay đổi rõ nhất. Trước mốc, 31.635 request POST nhận mã 200, và 29.704 trong số đó có câu trả lời dài đúng 258 byte, tức một thông báo ngắn cố định chứ không là dữ liệu. Từ mốc, 2.356 request POST nhận mã 403, câu trả lời dài 75 byte, và lớp bảo vệ trả lời trước khi WordPress phải chạy.
Cửa đăng nhập đổi theo cách khác. Trước mốc, wp-login.php trả 403 cho 3.199 request. Từ khi website dùng đường dẫn đăng nhập riêng, wp-login.php và /wp-admin/ trả 404 như một tệp không tồn tại, nên người quét không biết website có cửa đăng nhập ở đâu.
Nhóm tệp sao lưu và dữ liệu có 347 request trước mốc và 41 request từ mốc; từ mốc, mọi request thuộc nhóm này nhận 404. Bài học là để tệp sao lưu ngoài thư mục web và để máy chủ web trả 404 cho các đuôi này.
4Các lớp chặn của một website WordPress và chỗ mỗi lớp đứng
Dấu vết trong log khớp với các lớp MONA bật khi cứng hoá website ngày 25/09. Bảng dưới ghi mỗi lớp đứng ở đâu, vì thứ tự lớp quyết định request bị chặn sớm hay muộn.
| Lớp | Đứng ở đâu | Làm gì | Dấu vết trong log |
|---|---|---|---|
| Cloudflare | Trước máy chủ | Mọi request đi qua; chặn một phần ở rìa mạng trước khi tới máy chủ | 374.164 request trong bản log đều đi qua Cloudflare |
| Luật nginx | Máy chủ web, trước PHP | Trả 404 cho tệp .sql, .old, .swp, .bak và .env | Nhóm tệp cấu hình bí mật và tệp sao lưu nhận 404 sau mốc |
| MONA Shield 1.6.2 | Plugin chạy trong WordPress | Chặn xmlrpc.php bằng 403, chặn danh sách người dùng REST bằng 401, đưa ?author= về trang chủ | POST tới xmlrpc.php nhận 403 dài 75 byte |
| Đường dẫn đăng nhập riêng | Mã của website | wp-login.php và /wp-admin/ trả 404 khi chưa đăng nhập; sai mật khẩu 5 lần trong 15 phút thì khoá IP đó 15 phút | wp-login.php chuyển từ 403 sang 404 |
| IP thật từ Cloudflare | Mã của website | Đặt địa chỉ người dùng thật vào mọi lệnh khoá, để khoá đúng người sai mật khẩu và không khoá nhầm cả nhóm dùng chung một nút Cloudflare | Không đo được trong log này |
Thứ tự trong bảng là thứ tự request đi qua. Lớp càng ở ngoài càng rẻ cho máy chủ: một request bị từ chối ở nginx chưa cần mở PHP và chưa cần kết nối cơ sở dữ liệu.
5Mười việc nên kiểm trên website WordPress của doanh nghiệp
Mười việc dưới đây rút từ chín nhóm trong bài. Cột giữa là số đo được ở mona.software. Cột cuối là cách kiểm, và là cách đọc của MONA, chưa có điều luật nào bắt buộc.
| Việc | Số đo ở mona.software | Cách kiểm |
|---|---|---|
| xmlrpc.php | Nhận 34.051 request, nhiều nhất trong chín nhóm | Gửi một POST thử tới /xmlrpc.php; mã 200 nghĩa là WordPress còn xử lý. Nếu không dùng ứng dụng nào gọi XML-RPC thì tắt hoặc chặn ở lớp ngoài. |
| Cửa đăng nhập | Nhận 5.046 request, trong đó 961 là POST | Đổi đường dẫn đăng nhập, giới hạn số lần sai theo IP thật phía sau Cloudflare, trả 404 cho wp-login.php khi chưa đăng nhập. |
| /.env và /.git | Nhận 2.168 request | Gõ thử /.env và /.git/config trên website của mình; kết quả đúng là 404 hoặc 403. |
| Tệp sao lưu | Nhận 388 request | Không để tệp .sql, .zip, .bak trong thư mục web. Lưu ngoài thư mục web, và để máy chủ web trả 404 cho các đuôi này. |
| phpMyAdmin, Adminer | Nhận 23 request | Không cài công cụ quản trị cơ sở dữ liệu trên máy chủ web công khai; cần dùng thì giới hạn theo IP hoặc qua VPN. |
| Danh sách người dùng REST | Nhận 109 request | Chặn /wp-json/wp/v2/users với khách chưa đăng nhập, để tên đăng nhập quản trị không bị lấy. |
| readme.txt của plugin | Nhận 174 request, 12 nhận mã 200 | Mã 200 nghĩa là website cho đọc phiên bản plugin. Chặn truy cập trực tiếp readme.txt và license.txt. |
| Tệp lõi WordPress gọi trực tiếp | Nhận 183 request | Chặn các tệp như wp-links-opml.php, wp-trackback.php nếu website không dùng. |
| Tệp PHP lạ | Nhận 5.814 request, tên tệp lặp lại | Định kỳ so thư mục wp-content và wp-includes với danh sách tệp lõi của WordPress; tệp lạ cần xoá và tìm cách nó vào được. |
| Đọc log theo nhóm | 12,8% request là dò quét | Mỗi tuần đếm request theo chín nhóm này. Một nhóm tăng đột ngột là dấu hiệu cần xem, như ngày đỉnh trong bảng ngày. |
6Giới hạn của phép đo
- Một website, 10,7 ngày. Số của website khác, hoặc của một tuần khác, sẽ khác; ngày đỉnh 24/09 cho thấy một đợt dò có thể dồn vào vài giờ.
- Nhóm được xác định theo đường dẫn. Một request có thể đến từ người, công cụ giám sát hoặc bot, và log không phân biệt được. Chuỗi trình duyệt không dùng để phân loại vì người quét thường giả chuỗi này.
- Cloudflare có thể chặn một phần request trước khi tới máy chủ, nên log máy chủ đếm thấp hơn số thật. Đường dẫn dạng ?author=1 nằm ở phần tham số nên chưa đếm được.
- Trước và sau mốc đổi lớp chặn chỉ là so sánh theo thời gian, chưa là thử nghiệm có đối chứng. Phần «sau» có 74,6 giờ, và ngày đỉnh 24/09 nằm ở phần «trước», nên lượng request giữa hai phần không so thẳng được. Bài chỉ so cách máy chủ trả lời.
- Mã 200 trả lời một request chưa nói gì về việc đòn dò thành công. Thông báo ngắn cố định của XML-RPC trước mốc là một câu từ chối. Bài không xác định tệp nào bị lộ nội dung, ngoài các mã trả lời ghi trong bảng.
- Danh sách tệp lõi lấy theo WordPress 7.1.2. Một tệp .php lạ trùng tên với tệp lõi của bản khác sẽ bị xếp nhầm vào nhóm tệp lõi.
7Phương pháp, dữ liệu và trích dẫn
Dữ liệu là nhật ký truy cập nginx của mona.software, đã bỏ địa chỉ IP và chuỗi trình duyệt, từ 18/09/2026 01:10 đến 28/09/2026 17:58 giờ Việt Nam (256,8 giờ). Chỉ tính 374.164 request đi qua Cloudflare, bỏ các request nội bộ của WordPress. Mỗi request được xếp vào chín nhóm theo đường dẫn, kiểm theo thứ tự trong bảng nhóm, mỗi request một nhóm. Tệp lõi phân biệt với tệp lạ bằng danh sách tệp .php của WordPress 7.1.2 lấy từ api.wordpress.org. Mốc so sánh là lần đầu POST tới xmlrpc.php nhận 403. Mã chạy lại nằm trong file analyze.py; bản trích log gốc chứa đường dẫn của mọi người xem nên không đăng.
Tải dữ liệu: Tổng quan JSON · Chín nhóm CSV · Theo ngày CSV · Trước và sau CSV · Đường dẫn hay gặp CSV · Mã chạy lại PY
- Danh sách tệp lõi WordPress 7.1.2 · dùng để phân biệt tệp lõi và tệp lạ, lấy 05/10/2026
- OWASP Top 10:2025, A02 Security Misconfiguration · nhóm lỗi cấu hình sai, xếp hạng 2
- Nhật ký truy cập nginx của mona.software, bản trích đã ẩn danh · dữ liệu gốc không đăng; xuất sang file tổng hợp
Trích dẫn bài này
Nhóm kỹ thuật MONA Software (2026). Website WordPress của doanh nghiệp bị dò những gì mỗi ngày. NC-05, bản 1.0. Công ty TNHH Phần mềm MONA. https://mona.software/nghien-cuu/website-wordpress-bi-do-nhung-gi-moi-ngay/. Đo 18/09 đến 28/09/2026, cập nhật 05/10/2026.
@techreport{mona_nc05_2026,
author = {{Nhóm kỹ thuật MONA Software}},
title = {Website WordPress của doanh nghiệp bị dò những gì mỗi ngày},
institution = {Công ty TNHH Phần mềm MONA},
number = {NC-05, bản 1.0},
year = {2026},
month = oct,
url = {https://mona.software/nghien-cuu/website-wordpress-bi-do-nhung-gi-moi-ngay/},
note = {Bài đo, đo 18/09 đến 28/09/2026}
}














































