| 
       关于register globals设置为TRUE的危害,应该很多人看过把register globals设置为on是非常危险的,但是怎么危险法呢?应该很多新手不知道的!所以我就简单说说register globals设置为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设置为on的时候的话,看看有什么效果: 
在浏览器中输入:http://********/index.php?GLOBALS=***那你上面的代码就执行错误了!因为$GLOBALS的数据已经修改了!当register globals设置为on的时候,?GLOBALS=***这样的形式会转换成$GLOBALS = ***的形式的!!所以非常危险。 
虽然在这个例子中危害不大,但是在一些需要用到$GLOBALS全局变量的地方我们都应该检测register globals是否设置为on,可以用以下代码来检测一下 
	
	- function wp_unregister_GLOBALS() { 
 
	- if ( !ini_get('register_globals') ) 
 
	- return; 
 
	- if ( isset($_REQUEST['GLOBALS']) ) 
 
	- die('GLOBALS overwrite attempt detected'); 
 
	-  
 
	- $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]); 
 
	- } 
 
	- } 
 
	 
 
      
      (责任编辑:admin) |