WordPress REST API:為什麼不完全關閉,只擋登出狀態

WordPress REST API 會透過 wp-json 位址,把網站的使用者名稱也顯示給沒有登入的訪客。完全關閉有時會讓區塊編輯器儲存失敗,所以本文整理只擋登出狀態的請求、並用 401 回應確認的方法。
1️⃣ 什麼是 WordPress REST API:wp-json 位址與它的用途
WordPress REST API 是以 JSON 格式交換文章、頁面、使用者等網站資料的 WordPress 內建功能,在網站網址後面的 /wp-json/ 底下回應。
/wp-json/ 底下的位址依資料種類分成 [wp/v2/posts]·[wp/v2/pages]·[wp/v2/users] 等,每一個位址稱為端點(endpoint)。區塊編輯器儲存文章時,也會向這些位址送出請求。
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️⃣ 透過 wp-json 曝光的使用者名稱
[wp/v2/users] 端點會回應每位發表過文章的使用者的顯示名稱與 slug,而 slug 預設就是登入帳號。測試網站 https://testpilotweb.com/ 的管理員帳號,slug 也和登入帳號相同。
登入帳號一旦曝光,攻擊者只要猜出密碼就能登入;測試網站的 WordPress 登入畫面,在 2026 年 10 月 7 日一天就記錄到 2,570 次暴力破解嘗試。
就算擋了這個位址,作者頁面網址(/author/帳號/)裡還是留著同一個帳號。
3️⃣ 完全關閉會壞掉的東西
把 WP REST API 全部關掉,最先壞掉的就是區塊編輯器的文章儲存;所以 WordPress 最佳化外掛之一的 Perfmatters,也把關閉範圍分成 [Disable for Non-Admins] 與 [Disable When Logged Out] 兩個等級。有作者或投稿者帳號的網站,[Disable for Non-Admins] 也會讓這些帳號無法儲存文章。
就算是只擋登出狀態的網站,在 claude.ai 連接 MCP 連接器、完成驗證後,工具仍顯示 0 個。伺服器紀錄上的 MCP 請求全是 401,原因是 Perfmatters 在 MCP 確認權杖之前就擋下了請求。
| [Disable REST API] 的值 | 登出訪客的 users 位址 | 非管理員帳號的文章儲存 | 適合 |
|---|---|---|---|
| Default (Enabled) | 使用者名稱曝光 | 可以儲存 | — |
| Disable for Non-Admins | 401 | 儲存失敗 | 沒有作者·投稿者帳號的網站 |
| Disable When Logged Out | 401 | 可以儲存 | 有作者帳號的網站;MCP 等權杖連線要加入例外路徑 |
4️⃣ 只擋登出狀態的設定(Perfmatters)
在 WordPress 管理後台的 [設定] → [Perfmatters] → [General],把 [Core] 項目的 [Disable REST API] 改成 [Disable When Logged Out],再按 [儲存設定]。


Perfmatters 支援的語言:英文(預設)、韓文、德文、法文、義大利文、荷蘭文、葡萄牙文(巴西)、俄文、烏克蘭文、土耳其文、保加利亞文、匈牙利文、印尼文、波斯文、中文(簡體)

在沒有登入的無痕視窗開啟 /wp-json/wp/v2/users,會收到 401 回應與 [Sorry, you do not have permission to make REST API requests.] 訊息,而登入狀態下的區塊編輯器仍然照常儲存文章。
[
{
"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️⃣ 為擋下的路徑設定例外
在擋住的狀態下只想開放特定路徑時,把該路徑加入 Perfmatters 的 [perfmatters_rest_api_exceptions] 過濾器。claude.ai MCP 連接器工具 0 個的問題,是在 Perfmatters 的 [Code] 選單建立 PHP 程式片段,只把 MCP 路徑設為例外來解決的。
add_filter('perfmatters_rest_api_exceptions', function($exceptions) {
$exceptions[] = '/mcp/mcp-oauth-server';
return $exceptions;
});設了例外之後,沒有權杖的請求仍會由 MCP 自己以 [MCP authentication required.] 訊息與 401 回應擋下,/wp-json/wp/v2/users 則繼續回傳 Perfmatters 的 401 回應。
[MCP authentication required.]
同一個 [Core] 項目的 [Remove REST API Links],只是從頁面標頭與回應標頭刪除 api.w.org 連結的設定,WP REST API 本身照樣回應。
🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。