關(guān)于register globals設(shè)置為TRUE的危害,應(yīng)該很多人看過把register globals設(shè)置為on是非常危險(xiǎn)的,但是怎么危險(xiǎn)法呢?應(yīng)該很多新手不知道的!所以我就簡單說說register globals設(shè)置為on的危害吧!
先看看下面的代碼:在config.php文件中有一下的代碼:
- <?php
- $GLOBALS[‘host’] = 'localhost';
- $GLOBALS[‘username’] = 'root';
- $GLOBALS[‘password’] = '';
- $GLOBALS[‘database’] = 'test';
- ?>
在db.php中有以下代碼:
- <?php
- require_once 'config.php';
- function db_connect() {
- $db=mysql_connect($GLOBALS['host'], $GLOBALS['username'], $GLOBALS['password']);
- mysql_select_db($GLOBALS['database'], $db);
- return $db;
- }
- ?>
很明顯加入上面的代碼是在register globals設(shè)置為on的時(shí)候的話,看看有什么效果:
在瀏覽器中輸入:http://********/index.php?GLOBALS=***那你上面的代碼就執(zhí)行錯(cuò)誤了!因?yàn)?GLOBALS的數(shù)據(jù)已經(jīng)修改了!當(dāng)register globals設(shè)置為on的時(shí)候,?GLOBALS=***這樣的形式會轉(zhuǎn)換成$GLOBALS = ***的形式的!!所以非常危險(xiǎn)。
雖然在這個(gè)例子中危害不大,但是在一些需要用到$GLOBALS全局變量的地方我們都應(yīng)該檢測register globals是否設(shè)置為on,可以用以下代碼來檢測一下
- function wp_unregister_GLOBALS() {
- if ( !ini_get('register_globals') )
- return;
- if ( isset($_REQUEST['GLOBALS']) )
- die('GLOBALS overwrite attempt detected');
- // Variables that shouldn't be unset
- $noUnset = array('GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES');
- $input = array_merge($_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_FILES, isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array());
- foreach ( $input as $k => $v )
- if ( !in_array($k, $noUnset) && isset($GLOBALS[$k]) ) {
- $GLOBALS[$k] = NULL;
- unset($GLOBALS[$k]);
- }
- }
新聞熱點(diǎn)
疑難解答