360 網站安全檢測報告「頁面異常導致本地路徑洩露」,本質是 PHP 錯誤信息直接輸出到前端,洩露絕對路徑、文件結構、數據庫連接信息等敏感內容,助長攻擊者偵察。核心修復:**禁止生產環境顯示錯誤詳情,改為記錄日誌**。
; 找到並修改
display_errors = Off
; 建議同時開啟錯誤日誌
log_errors = On
error_log = /var/log/php/error.log
; 生產環境建議錯誤級別
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
修改後重啟 PHP-FPM/Apache/Nginx:systemctl restart php-fpm 或 systemctl restart httpd/nginx
httpd.conf / apache2.conf / .htaccess / 虛擬主機配置 中添加:
php_flag display_errors off
php_value error_reporting 32759 # E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
php_flag log_errors on
php_value error_log "/var/log/php/vhost_error.log"
優點:單站點生效,不影響同服務器其他站點。
缺點:需 AllowOverride Options 或修改主配置並重啟 Apache。
在**項目入口文件最頂部** (如 index.php、common.php、框架啟動文件) **第一行** 添加:
<?php
ini_set('display_errors', '0'); // 關閉顯示
ini_set('log_errors', '1'); // 開啟日誌
ini_set('error_log', __DIR__.'/logs/php_error.log'); // 指定日誌路徑 (需可寫權限)
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
?>
✅ **最通用、無需服務器權限、立即生效、不影響其他站點**。
💡 框架項目 (Laravel/ThinkPHP/CodeIgniter/Yii) 應在框架啟動文件或 public/index.php 極早期調用。
error_page 500 /500.html;、Apache ErrorDocument 500 /500.html、PHP set_error_handler() / 框架異常處理器web.config 中配置:
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/500.html" />
<compilation debug="false" />
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Replace" />
</system.webServer>
</configuration>
AllowOverride Options 或 AllowOverride All