好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php 安全register globals设置为TRUE的危害 - php高级应

php 安全register globals设置为TRUE的危害

关于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' );  // 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 ]);  }  } 

查看更多关于php 安全register globals设置为TRUE的危害 - php高级应的详细内容...

  阅读:47次