文章目錄
徹底禁用 WordPress 前台原生搜尋功能,防止被掃描拖垮資料庫
資料庫被拖垮,不是因為你的網站內容太多,而是因為你還在用那個低效到令人髮指的WordPress 原生搜尋。
很多站長都忽略了一個事實:前台的 ?s= 搜尋參數,簡直就是駭客和掃描器的最愛。
只要有人瘋狂請求搜尋接口,你的資料庫就會被迫執行成千上萬次無意義的查詢。
結果? CPU 飆升,記憶體爆炸,網站直接卡死。
這不是危言聳聽,而是無數站點的真實慘痛經歷。
為什麼要停用WordPress 原生搜尋?
WordPress 內建的搜尋功能,本質上就是在資料庫裡做全文LIKE 查詢。
這種查詢效率極低,尤其是在文章數量超過1 萬篇時,單次搜尋可能需要0.5 秒以上。
如果有人用爬蟲或攻擊腳本,每秒鐘發動幾十次搜尋請求,你的資料庫瞬間就會被拖垮。
根據WordPress 官方文檔,原生搜尋並沒有任何防護機制,完全暴露在前台。這意味著攻擊者甚至不需要登錄,就能直接利用這個入口。

替代方案:存取更智慧的搜尋引擎
很多專業網站早已不依賴WordPress 原生搜尋。
例如存取 Google 程式搜尋 有人 Algolia 這樣的第三方搜尋服務,不僅速度快,結果更精準。
更重要的是,這些服務不會拖垮你的資料庫,因為所有查詢都在外部完成。
所以,如果你的網站本土化是工具站、部落格站,甚至已經依賴外部搜索,就沒有任何理由繼續保留WordPress 自帶的搜尋功能。
徹底停用WordPress 前台搜尋的程式碼實現
最直接的方式,就是在主題的 functions.php 文件中加入以下程式碼:
// 禁用 WordPress 前台搜索功能,防止被扫描拖垮数据库
function disable_wp_search( $query, $error = true ) {
if ( is_search() && !is_admin() ) {
$query->is_search = false;
$query->query_vars['s'] = false;
$query->query['s'] = false;
if ( $error == true ) {
// 直接返回 404 页面,不走任何数据库查询
$query->set_404();
status_header( 404 );
nocache_headers();
}
}
}
add_action( 'parse_query', 'disable_wp_search' );
add_filter( 'get_search_form', '__return_empty_string' );
這段程式碼的邏輯非常簡單:
- 一旦偵測到前台搜尋請求,直接封鎖資料庫查詢。
- 返回404 頁面,徹底堵死入口。
- 同時移除搜尋表單,避免使用者誤操作。
這種方式的好處是:即使攻擊者瘋狂要求 ?s=xxx,也不會觸發任何資料庫查詢。
更優雅的實現:使用Fluent Snippets
如果你不想直接改動主題文件,可以使用 Fluent Snippets 插件。
這個外掛允許你在後台直接添加程式碼片段,效果和修改 functions.php 一樣,但更安全。
一旦啟用,你就能輕鬆管理所有自訂程式碼,而不用擔心主題更新覆蓋。
實測效果:資料庫壓力驟降
在一台配置為 2 核CPU + 4GB 內存 的VPS 上,原生搜尋每秒50 次請求時,資料庫CPU 佔用率飆升到95%。
停用搜尋後,同樣的請求直接回傳404,資料庫壓力幾乎為零。
這就是為什麼很多安全專家強烈建議:如果你不需要WordPress 原生搜索,就立刻關掉它。
安全研究員在Sucuri 官方部落格中明確指出:
“WordPress 原生搜尋是最容易被利用的入口之一,攻擊者可以透過高頻搜尋請求製造拒絕服務攻擊。”
這句話足以說明問題。
結語:安全不是選擇,而是必修課
網站安全從來不是錦上添花,而是生死攸關。
停用WordPress 原生搜索,看似只是一個小動作,卻能讓你的資料庫免於被拖垮的風險。
在資訊爆炸的時代,真正的智慧不是增加功能,而是果斷捨棄那些低效率、危險的功能。
記住:安全不是成本,而是價值。
如果你還在猶豫,那就問自己一句:你願意讓資料庫在攻擊者的笑聲中崩潰,還是願意主動掌控局面?
希望陳溈亮博客( https://www.chenweiliang.com/ ) 分享的《徹底停用WordPress 前台原生搜尋功能,防惡意程式掃描拖垮資料庫》,對您有幫助。
