首页 > php开发 > php 安全register globals设置为TRUE的危害

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,可以用以下代码来检测一下

<?php
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]);
    }
}
?>

教程链接:http://www.phprm.com/develop/fs545.html

随意转载~但请保留教程地址★

标签:globals php安全 register

相关文章

发表留言