我想確保人們不能在URL中輸入PHP腳本的名稱並運行它。這樣做的最好方法是什麼?什麼是僅允許包含PHP文件的最佳方式?
我可以在將包含此文件的文件中設置一個變量,然後在包含的文件中檢查該變量,但有沒有更簡單的方法?
我想確保人們不能在URL中輸入PHP腳本的名稱並運行它。這樣做的最好方法是什麼?什麼是僅允許包含PHP文件的最佳方式?
我可以在將包含此文件的文件中設置一個變量,然後在包含的文件中檢查該變量,但有沒有更簡單的方法?
您可以檢查URI,看看是否有文件被調用`
$_SERVER['SCRIPT_FILENAME']
,或者你可以將文件移到公共文件夾之外,這是一個更好的解決方案。
正如Unkwntech建議的那樣,Zend Framework建議您將文件保存在Web根目錄之外。我會說這是最安全和最愚蠢的解決方案。
從PHP Nuke的模塊:
<?php
if (!eregi("modules.php", $PHP_SELF)) {
die ("You can't access this file directly...");
}
// more code ...
?>
替換modules.php您的文件名,該文件不能被直接調用。我見過很多
一種方法是創建具有存在於每一個包含文件,並檢查第一件事就是在每一個變量包括:
if(!isset($in_prog)){
exit;
}
我早就把一切除了直接可見的腳本在網頁根目錄之外。然後配置PHP以將您的腳本目錄包含在路徑中。一個典型的設立將是:
appdir include html
在PHP配置(無論是全球PHP配置或在.htaccess
文件中html
目錄)補充一點:
include_path = ".:/path/to/appdir/include:/usr/share/php"
或(適用於Windows)
include_path = ".;c:\path\to\appdir\include;c:\php\includes"
請注意,該行可能已經在您的php.ini
文件中,但可能會被註釋掉,以允許默認值工作。它也可能包含其他路徑。一定要保留這些。
如果你將它添加到.htaccess文件,格式爲:
php_value include_path .:/path/to/appdir/include:/usr/share/php
最後,你可以用這樣的編程添加路徑:
$parentPath = dirname(dirname(__FILE__));
$ourPath = $parentPath . DIRECTORY_SEPARATOR . 'include';
$includePath = ini_get('include_path');
$includePaths = explode(PATH_SEPARATOR, $includePath);
// Put our path between 'current directory' and rest of search path
if ($includePaths[0] == '.') {
array_shift($includePaths);
}
array_unshift($includePaths, '.', $ourPath);
$includePath = implode(PATH_SEPARATOR, $includePaths);
ini_set('include_path', $includePath);
(基於工作代碼,但已修改,因此未經測試)
這應該在您的前端文件中運行(例如index.php
)。我把它放在一個單獨的包含文件中,在修改上面的文件後,可以將其包含在#include '../includes/prepPath.inc'
之類的文件中。
我已經使用了我在這裏介紹的所有版本,並取得了成功。使用的特定方法取決於偏好,以及項目將如何部署。換句話說,如果你不能修改php.ini
,你顯然不能使用這種方法
在我探討過的一些開源應用程序中,包括Joomla和PHPBB,他們聲明瞭一個常量主要包括文件,然後驗證不斷在每個存在包括:
// index.php
require_once 'includes.php';
// includes.php
define('IN_MY_PROJECT', true);
include 'myInc.php';
// myInc.php
defined('IN_MY_PROJECT') || die("No direct access, plsktnxbai");
我想最好的辦法就是把你要包括裏面的文件「/包括」文件夾,並把訪問權限700該文件夾
您能否更清楚一點?我真的不明白,如果你的瀏覽器指向它,你不希望文件不能運行... – 2008-10-06 03:53:17
也許如果預製函數的功能,也許是爲了安全起見,爲什麼不相關。 – UnkwnTech 2008-10-06 03:54:29
@Unkwntech:我的困惑來自這樣的事實,如果一個文件是在webroot下它應該是查看,任何安全必須在它之外... – 2008-10-06 03:58:46