首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

WordPress 隱藏錯誤資訊,強化網站安全性的實作指南

     編輯:PHP 相關知識

在進行網站安全掃描時,常會發現一個容易被忽視的風險:直接存取 WordPress 主題目錄下的 PHP 檔案(如 index.php),會觸發 Call to undefined function get_header() 致命錯誤。若伺服器設定為顯示錯誤訊息,完整的伺服器路徑結構便會暴露在瀏覽器中,雖然不影響正常瀏覽,卻為惡意掃描提供了寶貴的偵察情報。本文將分享如何徹底關閉錯誤顯示,並導向首頁避免流量流失的完整解決方案。

問題情境與風險分析

環境為 Linux VPS + LNMP 架構。當直接造訪 /wp-content/themes/twentytwelve/index.php 時,PHP 引擎拋出錯誤:

Fatal error: Call to undefined function get_header() in /網站根路徑/izhangheng/wp-content/themes/twentytwelve/index.php on line 10

錯誤訊息完整揭露了實體路徑 /網站根路徑/izhangheng/,這對資安檢測來說屬於資訊洩漏漏洞。後台日誌顯示每天都有大量掃描嘗試存取各類路徑與檔案,堵住這類洩漏能顯著提升防禦深度。

分層防護策略:從伺服器層到應用層

1. PHP 與 Web Server 設定層面(通用做法)

若應用程式本身具備錯誤處理機制(如 WordPress 的 WP_DEBUG),優先確保其關閉。若無,需依環境分別設定:

  • php.ini:display_errors = Off
  • Apache (httpd.conf / apache2.conf):php_flag display_errors off
  • PHP 腳本內:ini_set('display_errors', 0);

筆者環境預設已關閉 display_errors,但為了雙重保險,仍建議在程式碼層面再次強制關閉。

2. WordPress 主題層面:優雅降級與流量保留

單純隱藏錯誤會讓使用者看到空白頁,體驗極差。更好的做法是:在主題模板(如 index.php、single.php)最頂端,先關閉錯誤顯示,再判斷 WordPress 核心函數是否存在;若不存在(代表被直接呼叫),立即 302 導向首頁。

實作程式碼(放在主題檔案最開頭)

<?php
ini_set('display_errors', 0);
?>
<?php
/**
 * @package WordPress
 * Security hardening: prevent direct file access
 */
if (function_exists('get_header')) {
    get_header();
} else {
    header("Location: https://" . $_SERVER['HTTP_HOST'] . "/");
    exit;
}
?>

關鍵點說明:

  • 所有符號務必使用半形英文字元。
  • ini_set('display_errors', 0) 必須在輸出任何內容前執行。
  • 使用 function_exists('get_header') 偵測 WordPress 環境是否已載入。
  • header("Location: ...") 導向網站根目錄,保留流量並隱藏結構。

驗證成效

部署後再次掃描,原本洩漏路徑的漏洞消失,安全評分可達 100 分(表面層級)。資安是持續攻防,發現一個、修補一個,才能構建纵深防禦體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved