Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

PHP 防跨站、防跨目錄安全配置實戰 (open_basedir 限制)

編輯:關於伺服器

眾多 PHP 建站系統 (CMS) 本身安全性參差不齊,若伺服器未做目錄隔離,單一站點被攻破即可能波及全盤。PHP 5.3+ 提供 open_basedir 指令,可將腳本存取限制在指定目錄樹內,有效防範跨站、跨目錄攻擊。本文以 CentOS 為例示範配置流程。

適用範圍與環境

  • PHP 5.3 及以上版本
  • 示範系統:CentOS

配置步驟

第 1 步:登入 Linux 終端機

以 root 或具 sudo 權限的使用者 SSH 登入伺服器。

第 2 步:定位並編輯 php.ini

# 常見路徑
/etc/php.ini
/usr/local/php/etc/php.ini
# 以實際安裝路徑為準

第 3 步:於檔案末尾加入隔離規則

[HOST=www.example.com]
open_basedir=/wwwroot/www.example.com/:/tmp/

[PATH=/wwwroot/www.example.com]
open_basedir=/wwwroot/www.example.com/:/tmp/

說明:

  • [HOST=...]:針對特定虛擬主機域名生效 (PHP 5.3+ 支援)。
  • [PATH=...]:針對實體路徑生效,雙重保障。
  • open_basedir:允許存取的目錄前綴,多個目錄以 : 分隔 (Windows 用 ;)。必須包含網站根目錄與 /tmp (Session、上傳暫存需用)。

第 4 步:重啟 PHP 服務生效

# PHP-FPM
systemctl restart php-fpm
# 或
service php-fpm restart

# Apache 模組模式
systemctl restart httpd

常見問題與對策

1. PHP 探針 (如 phpinfo、tanzhen) 無法顯示系統資訊

原因:探針需讀取 /proc 目錄 (CPU、記憶體、負載等)。
解法:在 open_basedir 末尾加入 :/proc/:

open_basedir=/wwwroot/www.example.com/:/tmp/:/proc/

2. 跨站包含 (include/require) 失效

若多站點需共用程式庫,請將共用庫路徑加入 open_basedir,或改用 Composer 自動載入避免硬編碼路徑。

3. 錯誤訊息:open_basedir restriction in effect

檢查腳本嘗試存取的路徑是否在允許清單內,必要時擴展允許目錄。

進階建議:結合 PHP-FPM Pool 隔離

生產環境建議為每個站點建立獨立 PHP-FPM Pool,設定不同使用者/群組,並在 php_admin_value[open_basedir] 中指定專屬路徑,實現進程級與檔案系統級雙重隔離:

; /etc/php-fpm.d/www.example.com.conf
[www.example.com]
user = www_example
group = www_example
listen = /run/php-fpm/www.example.com.sock
php_admin_value[open_basedir] = /wwwroot/www.example.com/:/tmp/:/proc/
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen
php_admin_value[expose_php] = Off

驗證配置是否生效

建立測試檔 test_open_basedir.php:

<?php
$test = @fopen('/etc/passwd', 'r');
if ($test) {
    echo "⚠️ 繞過 open_basedir 成功,配置未生效!";
    fclose($test);
} else {
    echo "✅ open_basedir 生效,跨目錄讀取被攔截。";
}
?>

瀏覽該檔,應顯示「✅ open_basedir 生效...」。

正確配置 open_basedir 並搭配 PHP-FPM Pool 隔離,能大幅提升共享主機或多站點伺服器的安全基線,將單點入侵影響範圍降至最低。

Copyright © Windows教程網 All Rights Reserved