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高级应的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29989