的index.php:PHP定義安全問題?
define("included", true);
包含的頁面:
if (included !== true) header('HTTP/1.1 404 Not Found');
目的的代碼是直接禁止訪問,但允許它,如果包括在內。我不確定這是否會帶來風險。我不允許覆蓋.htaccess
,所以我堅持使用PHP替代方案。
任何幫助將不勝感激!
的index.php:PHP定義安全問題?
define("included", true);
包含的頁面:
if (included !== true) header('HTTP/1.1 404 Not Found');
目的的代碼是直接禁止訪問,但允許它,如果包括在內。我不確定這是否會帶來風險。我不允許覆蓋.htaccess
,所以我堅持使用PHP替代方案。
任何幫助將不勝感激!
一個性感辦法是...
defined('included') OR exit;
也就是說,使用正確的函數(defined()
)查看是否定義了一個值,然後利用short circuit evaluation。另外,您可以使用現有的定義而不是專門創建一個定義,例如,引導文件可以定義類似...
define('DOCROOT', realpath(basename(__FILE__)));
...在這種情況下,你可以安全地使用DOCROOT
。
你也應該保持除了你的引導任何PHP文件的文檔根目錄上面,然後確保你的網站是安全的從directory traversal attacks :)
這是好的,但我想將其更改爲:
if (!defined('included')) {
header('HTTP/1.1 404 Not Found');
// actually make the request stop, since clients will not stop on 404 headers
die();
}
歡呼
通常您使用安裝喜歡自己正在做的,但執行die
或exit
放棄它,而不用擔心重定向。即使他們知道該文件存在,但如果您無法訪問該內容,則無用。
的common.php(或你的index.php,這取決於你的設置)
<?php
define('IN_PAGE',true);
...
?>
include_file.php
<?php
defined('IN_PAGE') or die('Unallowed access'); // or header('HTTP/1.0 404 Not Found'); exit;
...
?>
如何只將所有不屬於文件應該直接訪問webserver的文檔根目錄之外的目錄?
一個更簡單的方法是:
<?php
@runtime_presence();
如果函數存根不集中前確定這導致了致命錯誤。 (標題重定向和一個漂亮的錯誤消息沒有用作安全措施。)
似乎很好。唯一的建議是在if中添加`exit;`語句,因爲頭文件不會終止應用程序,它仍然會處理。這和常量通常是所有的大寫,這將是我的其他建議:) – 2011-02-10 23:24:11
這通常表示一個不好的應用程序設計。應該避免在main中執行的代碼。包括應該定義函數,所以這種解決方法是不必要的。 – mario 2011-02-10 23:27:21