由于我們有需要用到某些php文件,而又不希望別人直接訪問這個文件,我們可以在其他包含文件比如global.php中定義一個參數(shù),在被訪問頁面data.php前面判斷是否定義了該參數(shù),沒有定義則禁止訪問
在global.php中定義
<?php
define('root','./');
?>
在data.php文件中判斷:
<?
//data.php
if (!defined("root")) {
echo "you cannot access this script directly, have a nice day.";
exit();
}
?>
這樣的代碼可以解決很多的安全問題,比如變量未定義[應(yīng)該說在本文件內(nèi)未定義]。
但是這樣的在本地包含漏洞前就沒什么意義了。比如進來看一代碼
common.php文件里:
<?php
if ( !defined('root') )
{
die('do not access this file directly.');
}
if ( !isset($root_path) )
{
$root_path = './';
}
require_once($root_path . 'config.php');
?>
如果沒有!defined('x') 的限制,那么這里$root_path未定義導(dǎo)致了一個遠程包含。
而在改腳本又存在一個update-->include的2次攻擊導(dǎo)致的本地包含,那么我們可以通過這個本地包含漏洞包含common.php導(dǎo)致突破!defined('x'),轉(zhuǎn)化為遠程包含。
商業(yè)源碼熱門下載www.html.org.cn
新聞熱點
疑難解答