Home > php教程 > php手册 > php 安全register globals设置为TRUE的危害

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

WBOY
Release: 2016-06-13 09:52:39
Original
1115 people have browsed it



问题
关于register globals设置为TRUE的危害
解决方法
关于register globals设置为TRUE的危害
应该很多人看过把register globals设置为on是非常危险的,但是怎么危险法呢??应该很多新手不知道的!所以我就简单说说register globals设置为on的危害吧!
先看看下面的代码:
在config.php文件中有一下的代码:

$GLOBALS[‘host’] = 'localhost';

$GLOBALS[‘username’] = 'root';

$GLOBALS[‘password’] = '';

$GLOBALS[‘database’] = 'test';

?>


复制代码在db.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,可以用以下代码来检测一下(代码来源于wordpress): 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]);

}

}


复制代码就说到这里了!

[ ]


参考答案
好,就喜欢这类细究的文章!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template