Disable WP REST API

外掛說明

這個外掛只有一個功能,就是為未登入 WordPress 的使用者停用 WP REST API。不需要任何組態。

這個外掛僅用 22 行相當短的程式碼 (小於 2KB),因此它相當輕量化、快速、有效率

外掛特色

  • 為未登入的使用者停用 REST/JSON
  • 為全部使用者停用 HTTP 回應中的 REST 標頭
  • 為全部使用者停用 HTML 標頭中的 REST 連結
  • 完全隨裝即用,設定後不需後續管理

防止未經授權的使用者濫用你的 WordPress 網站最快速、易用的方式

這個外掛的執行方式,完全取決於網站目前採用的 WordPress 核心程式版本。

WordPress 4.7 或更新版本

對 WordPress 4.7 或更新版本來說,除非使用者登入 WordPress,否則這個外掛會完全停用 WP REST API。

  • 對已登入的使用者來說,WP REST API 會正常執行
  • 對未登入/以登出的使用者來說,WP REST API 會是停用狀態

至於已登出/未登入的使用者產生 JSON/REST 要求後,他們會收到以下訊息:

rest_login_required: 僅有已驗證的使用者可以使用 REST API。

這個訊息可透過篩選器勾點 disable_wp_rest_api_error 進行自訂,請參考這篇文章的範例了解如何使用這個篩選器勾點。

較舊版本的 WordPress

對 WordPress 4.6 或更舊版本來說,這個外掛會對全部使用者停用全部 REST API 功能。

其他進一步資訊,請參考下方〈常見問題集〉區段。

隱私權

這個外掛不會收集或儲存任何使用者資料。它不會設定任何 Cookie,也不會連線至任何第三方位置,因此它不會透過任何方式侵犯使用者隱私。相反的,這個外掛可以改善使用者隱私,因為它可以保護潛在的敏感資訊不會透過 TEST API 顯示/存取。

Disable WP REST API 由具備 15 年 WordPress 開發者書籍作者經驗的 Jeff Starr 開發及維護。

支持這個外掛的開發工作

因為喜愛 WordPress 社群,因此我開發並維護這個免費外掛。如果想要支持外掛開發工作,請贊助開發工作或購買我撰寫的書籍:

也可以透過購買以下付費 WordPress 外掛支持外掛開發:

十分歡迎外部連結、轉推及按讚,謝謝大家 🙂

安裝方式

手動安裝

  1. 上傳外掛檔案至網站並完成啟用。
  2. 大功告成!不需進行任何組態。

進一步了解安裝 WordPress 外掛的方式

測試方式

如需了解這個外掛是否正確執行,請登出 WordPress 並在瀏覽器中對 https://example.com/wp-json/ 提出要求。請參考〈常見問題集〉以進一步了解。

如果這個外掛對網站確有幫助

如果 Disable WP REST API 對網站確有幫助,請給予 5 星評等,這對外掛的持續開發及支援會有正面的幫助,謝謝大家。

常見問題集

預設的拒絕存取訊息是什麼?

如果是已登入 WordPress 的使用者,便會顯示正常的 REST API 資料;如果使用者登入,以下便是預設訊息:

{"code":"rest_login_required","message":"REST API restricted to authenticated users.","data":{"status":401}}

為什麼會有停用 RSET API 的需求?

這個外掛實際上只會針對未登入 WordPress 的使用者停用 REST API。以下是針對未登入的使用者停用 REST API 的幾個原因:

  • 未登入的使用者可能不需要 REST API
  • 停用 REST API 可以節省伺服器資源
  • 停用 REST API 可以最大程度降低潛在的攻擊途徑
  • 停用 REST API 可以防止內容遭到擷取及抄襲

這裡還有可供大家參考的其他原因。

是否還有其他可停用 REST 的外掛?

是的,還有 2 個可停用 REST 的外掛:

第一個外掛非常棒,它提供許多功能停用 REST API 的進階選項,而第二個外掛因為乏人使用而關閉。我 (指開發者) 撰寫我自己的停用 REST 外掛,主要原因是想要外掛輕量化、快速且有效率。如果需要更多設定及功能,請考慮採用上列第一個外掛。

如何確認 REST 已停用?

測試方式非常簡單:

  1. 登出 WordPress
  2. 使用瀏覽器對 https://example.com/wp-json/ 提出要求

如果看到以下訊息,代表 REST 已停用:

rest_login_required: 僅有已驗證的使用者可以使用 REST API。

如果再次登入 WordPress 並對 https://example.com/wp-json/ 提出要求,便會看到 REST 以如預期般執行。

這個外掛是否能停用由其他外掛新增的 REST 功能?

可以,但這些由其他外掛新增的 REST 功能必須使用 WP REST API 註冊 REST 端點。

這個外掛是否能與區塊編輯器搭配使用?

可以,無論使用哪一個編輯器 (傳統編輯器或區塊編輯器),這個外掛的執行方式都一樣。

自訂錯誤訊息的方式為何?

依照預設,這個外掛會對未通過身分驗證的使用者顯示「僅有已驗證的使用者可以使用 REST API」。如需依據需求自訂這個訊息,請在目前使用的佈景主題的 functions.php 中或使用自訂外掛新增以下程式碼:

function disable_wp_rest_api_error_custom($message) {

    return 'Customize your message here.'; // change this to whatever you want

}
add_filter('disable_wp_rest_api_error', 'disable_wp_rest_api_error_custom');

如何允許存取 Contact Form 7?

依據這篇討論串的說明,Contact Form 7 需要存取 REST API 才能讓聯絡表單正常執行。如果需要允許 Contact Form 7 存取 REST API,請參考這篇文章

如何提問?

請透過這份聯絡表單提出問題或意見反應。

使用者評論

2023 年 3 月 29 日
In generel a Good security concept . But at the other end many plugin developer use the Rest API Could be done much easier with a 5 3 line htaccess rule to block only ^.*wp-json/wp/v2/(users But anyway a good solution if you have a simpel installation.
2022 年 7 月 28 日 1 則留言
while the plugin si deadsimple and very low resource impact, keep in mind that there are plugins that need the rest to work with no auth (ex. contact form 7).
閱讀全部 33 則使用者評論

參與者及開發者

以下人員參與了開源軟體〈Disable WP REST API〉的開發相關工作。

參與者

〈Disable WP REST API〉外掛目前已有 3 個本地化語言版本。 感謝全部譯者為這個外掛做出的貢獻。

將〈Disable WP REST API〉外掛本地化為台灣繁體中文版

對開發相關資訊感興趣?

任何人均可瀏覽程式碼、查看 SVN 存放庫,或透過 RSS 訂閱開發記錄

變更記錄

如果 Disable WP REST API 對網站確有幫助,請給予 5 星評等,這對外掛的持續開發及支援會有正面的幫助,謝謝大家。

2.6.1

  • Tests on WordPress 6.4

2.6

  • Tests on WordPress 6.3

2.5.1

  • Fixes incorrect variable name
  • Tests on WordPress 6.2

2.5

  • Adds functionality to whitelist $_SERVER vars
  • Adds functionality to allow for array of vars
  • Updates default translation template
  • Tests on WordPress 6.1 + 6.2 (beta)
  • Tests on PHP 8.1 and 8.2

2.4.1

  • Improves plugin documentation
  • Tests on WordPress 6.1

2.4

  • Tests on WordPress 6.0

2.3

  • Improves documentation
  • Updates some links to external resources
  • Changes minimum required WP version to 4.6
  • Tests on WordPress 5.9

2.2

  • Tests on WordPress 5.8

2.1

  • Adds support for CF7 (Thanks to @darko-a7) (more info)
  • Adds filter hook disable_wp_rest_api_post_var
  • Tests on PHP 7.4 and 8.0
  • Tests on WordPress 5.7

2.0

  • Tests on PHP 7.4 and 8.0
  • Tests on WordPress 5.6

1.9

  • Refines readme/documentation
  • Tests on WordPress 5.5

1.8

  • Tests on WordPress 5.4

1.7

  • Tests on WordPress 5.3

1.6

  • Updates some links to https
  • Tests on WordPress 5.3 (alpha)

1.5

1.4

  • Tests on WordPress 5.1 and 5.2 (alpha)

1.3

  • Tests on WordPress 5.1

1.2

  • Adds homepage link to Plugins screen
  • Updates default translation template
  • Tests on WordPress 5.0

1.1

  • Updates GDPR blurb and donate link
  • Adds “rate plugin” link to Plugins screen
  • Adds icons for the WordPress Plugin Directory
  • Generates default translation template
  • Further tests on WP versions 4.9 and 5.0 (alpha)

1.0

  • Initial release