加入收藏 | 设为首页 | 会员中心 | 我要投稿 南平站长网 (https://www.0599zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-01-18 15:40:00 所属栏目:PHP教程 来源:互联网
导读:关于register globals设置为TRUE的危害,应该很多人看过把register globals设置为on是非常危险的,但是怎么危险法呢?应该很多新手不知道的!所以我就简单说说register globals设置为on的危害吧! 先看看下面的代码:在config.php文件中有一下的代码: ?php
  关于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的危害

(编辑:南平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读