WordPress REST API: vì sao chỉ chặn khi chưa đăng nhập thay vì tắt hẳn

WordPress REST API để lộ tên người dùng của website qua địa chỉ wp-json, kể cả với khách chưa đăng nhập. Tắt hẳn có khi làm trình soạn thảo khối lưu thất bại, nên bài viết tóm tắt cách chỉ chặn yêu cầu khi chưa đăng nhập và kiểm tra bằng phản hồi 401.
1️⃣ WordPress REST API là gì: địa chỉ wp-json và việc nó làm
WordPress REST API là tính năng có sẵn của WordPress để trao đổi dữ liệu website như bài viết, trang, người dùng ở định dạng JSON, và phản hồi dưới /wp-json/ sau địa chỉ website.
Dưới /wp-json/, địa chỉ được chia theo loại dữ liệu như [wp/v2/posts]·[wp/v2/pages]·[wp/v2/users], và mỗi địa chỉ này gọi là endpoint. Trình soạn thảo khối cũng gửi yêu cầu đến địa chỉ này khi lưu bài.
https://example.com/wp-json/
https://example.com/wp-json/wp/v2/posts
https://example.com/wp-json/wp/v2/pages
https://example.com/wp-json/wp/v2/users2️⃣ Tên người dùng lộ qua wp-json
Endpoint [wp/v2/users] trả về tên hiển thị và giá trị slug của từng người dùng đã đăng bài, và mặc định slug chứa nguyên ID đăng nhập. Tài khoản quản trị của site thử nghiệm https://testpilotweb.com/ cũng có slug giống ID đăng nhập.
Khi ID đăng nhập bị lộ, kẻ tấn công chỉ cần dò ra mật khẩu là đăng nhập được, và màn hình đăng nhập WordPress của site thử nghiệm đã ghi nhận 2.570 lần dò mật khẩu chỉ trong ngày 7/10/2026.
Dù chặn địa chỉ này, cùng ID vẫn còn trong địa chỉ trang tác giả (/author/ID/).
3️⃣ Những gì hỏng khi tắt hẳn
Nếu tắt toàn bộ WP REST API, việc lưu bài trong trình soạn thảo khối sẽ hỏng trước tiên; vì vậy Perfmatters, một plugin tối ưu WordPress, chia phạm vi tắt thành hai mức [Disable for Non-Admins] và [Disable When Logged Out]. Với site có tài khoản tác giả hoặc cộng tác viên, [Disable for Non-Admins] cũng chặn các tài khoản đó lưu bài.
Ngay cả trên site chỉ chặn khi chưa đăng nhập, khi kết nối MCP connector trong claude.ai, sau khi xác thực xong số công cụ hiện là 0. Log server ghi mọi yêu cầu MCP là 401, và nguyên nhân là Perfmatters chặn yêu cầu trước khi MCP kiểm tra token.
| Giá trị [Disable REST API] | Địa chỉ users với khách chưa đăng nhập | Lưu bài của tài khoản không phải quản trị viên | Phù hợp với |
|---|---|---|---|
| Default (Enabled) | Lộ tên người dùng | Lưu được | — |
| Disable for Non-Admins | 401 | Lưu thất bại | Site không có tài khoản tác giả·cộng tác viên |
| Disable When Logged Out | 401 | Lưu được | Site có tài khoản tác giả; kết nối bằng token như MCP thì thêm đường dẫn ngoại lệ |
4️⃣ Cài đặt chỉ chặn khi chưa đăng nhập (Perfmatters)
Trong màn hình quản trị WordPress, vào [Cài đặt] → [Perfmatters] → [General], đổi [Disable REST API] ở mục [Core] thành [Disable When Logged Out] rồi bấm [Lưu thay đổi].


Ngôn ngữ Perfmatters hỗ trợ: tiếng Anh (mặc định), tiếng Hàn, tiếng Đức, tiếng Pháp, tiếng Ý, tiếng Hà Lan, tiếng Bồ Đào Nha (Brazil), tiếng Nga, tiếng Ukraina, tiếng Thổ Nhĩ Kỳ, tiếng Bulgaria, tiếng Hungary, tiếng Indonesia, tiếng Ba Tư, tiếng Trung (giản thể)

Mở /wp-json/wp/v2/users trong cửa sổ ẩn danh mà không đăng nhập sẽ nhận phản hồi 401 kèm thông báo [Sorry, you do not have permission to make REST API requests.], còn trình soạn thảo khối khi đã đăng nhập vẫn lưu bài bình thường.
[
{
"id": 1,
"name": "User A",
"slug": "user_a",
"link": "https://example.com/author/user_a/"
}
]
{⏎ "code": "rest_authentication_error",⏎ "message": "Sorry, you do not have permission to make REST API requests.",⏎ "data": { "status": 401 }⏎}
5️⃣ Thêm ngoại lệ cho đường dẫn đã chặn
Khi cần mở riêng một đường dẫn trong lúc đang chặn, hãy thêm đường dẫn đó vào filter [perfmatters_rest_api_exceptions] của Perfmatters. Lỗi 0 công cụ của MCP connector trên claude.ai được giải quyết bằng cách tạo snippet PHP trong menu [Code] của Perfmatters, chỉ để đường dẫn MCP làm ngoại lệ.
add_filter('perfmatters_rest_api_exceptions', function($exceptions) {
$exceptions[] = '/mcp/mcp-oauth-server';
return $exceptions;
});Ngay cả sau khi thêm ngoại lệ, yêu cầu không có token vẫn bị chính MCP chặn với thông báo [MCP authentication required.] và phản hồi 401, còn /wp-json/wp/v2/users vẫn tiếp tục trả về phản hồi 401 của Perfmatters.
[MCP authentication required.]
[Remove REST API Links] trong cùng mục [Core] chỉ xóa liên kết api.w.org khỏi phần đầu trang và header phản hồi; bản thân WP REST API vẫn phản hồi như cũ.
🔢 FAQ & nội dung đề xuất
MCP
WP Rocket MCP Server
Cách kết nối để công cụ AI xóa cache và đổi cài đặt thay cho trang quản trị.
Bảo mật
Wordfence vs iThemes Security
So sánh hai plugin bảo mật chặn tấn công dò mật khẩu và mã độc.
ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.