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

PHP 防止直接訪問檔案的三種實用方案

     編輯:PHP 相關知識

PHP 防止直接訪問檔案的三種實用方案

保護敏感 PHP 檔案(如設定檔、核心類別、API 端點)不被瀏覽器直接存取,是 Web 安全的基本功。本文整理三種常見且有效的防護手法。

方案一:Referer 檢查(簡易但可繞過)

<?php
$allowedReferer = "https://www.example.com/";
if (empty($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], $allowedReferer) !== 0) {
    header("Location: $allowedReferer");
    exit;
}
// 正常邏輯...

缺點:Referer 可偽造、防火牆/隱私模式可能不送出,僅適合低風險頁面導引。

方案二:常數標記法(框架常用,推薦)

入口檔案 (index.php) 定義:

define('IN_SYSTEM', true);

受保護檔案 (config.php、core/*.php) 頂部驗證:

<?php
if (!defined('IN_SYSTEM')) {
    header('HTTP/1.1 403 Forbidden');
    exit('禁止直接存取');
}

所有框架(Laravel、ThinkPHP、CodeIgniter、Yii)皆採用此模式,簡單可靠。

方案三:目錄層級隔離(最徹底)

  • 將核心程式碼、設定檔、Vendor 置於 Web 根目錄之外
  • 只有 public/index.php、靜態資源在 DocumentRoot
  • Apache/Nginx 根本無法映射到受保護檔案
專案結構範例:
/var/www/project/
├── app/           # 應用核心(不可直接存取)
├── config/        # 設定檔
├── vendor/        # Composer 套件
├── storage/       # 日誌、快取、上傳
└── public/        # DocumentRoot
    ├── index.php  # 唯一入口
    ├── css/
    └── js/

進階補強:.htaccess 防護(共享主機適用)

# 放在敏感目錄下
<Files "*.php">
    Order Deny,Allow
    Deny from all
</Files>

# 或僅允許特定 IP
<Files "admin.php">
    Order Deny,Allow
    Deny from all
    Allow from 192.168.1.100
</Files>

最佳實踐建議

  1. 新專案:採用目錄隔離 + 常數雙重保障
  2. 舊專案重構:優先加常數檢查,漸進式移動檔案至非公開目錄
  3. 所有環境:關閉 display_errors、啟用錯誤日誌、定期掃描異常檔案

「纏繞防禦」才是王道:單一機制皆可被突破,分層防護才能將風險降至最低。

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