Heim  >  Artikel  >  Backend-Entwicklung  >  php 安全register globals设置为TRUE的危害_PHP教程

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

WBOY
WBOYOriginal
2016-07-13 10:50:50942Durchsuche



问题
关于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]);

}

}


复制代码就说到这里了!

[ ]


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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632604.htmlTechArticle问题 关于register globals设置为TRUE的危害 解决方法 关于register globals设置为TRUE的危害 应该很多人看过把register globals设置为on是非常危险的,...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn