php专区

 首页 > php专区 > PHP应用 > 常用功能 > php 安全register globals设置为TRUE的危害 - php高级应

php 安全register globals设置为TRUE的危害 - php高级应

分享到:
【字体:
导读:
          关于register globals设置为TRUE的危害,应该很多人看过把register globals设置为on是非常危险的,但是怎么危险法呢?应该很多新手不知道的!所以我就简单说说register globals设置为on的危害吧!...

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

关于register globals设置为TRUE的危害,应该很多人看过把register globals设置为on是非常危险的,但是怎么危险法呢?应该很多新手不知道的!所以我就简单说说register globals设置为on的危害吧!

先看看下面的代码:在config.php文件中有一下的代码: 

  1. $GLOBALS[‘host’] = 'localhost'
  2. $GLOBALS[‘username’] = 'root'
  3. $GLOBALS[‘password’] = ''
  4. $GLOBALS[‘database’] = 'test'
  5. ?> 

在db.php中有以下代码: 

  1. require_once 'config.php'
  2. function db_connect() { 
  3. $db=mysql_connect($GLOBALS['host'], $GLOBALS['username'], $GLOBALS['password']); 
  4. mysql_select_db($GLOBALS['database'], $db); 
  5. return $db
  6. ?> 

很明显加入上面的代码是在register globals设置为on的时候的话,看看有什么效果:

在浏览器中输入:http://********/index.php?GLOBALS=***那你上面的代码就执行错误了!因为$GLOBALS的数据已经修改了!当register globals设置为on的时候,?GLOBALS=***这样的形式会转换成$GLOBALS = ***的形式的!!所以非常危险。

虽然在这个例子中危害不大,但是在一些需要用到$GLOBALS全局变量的地方我们都应该检测register globals是否设置为on,可以用以下代码来检测一下

  1. function wp_unregister_GLOBALS() { 
  2. if ( !ini_get('register_globals') ) 
  3. return
  4. if ( isset($_REQUEST['GLOBALS']) ) 
  5. die('GLOBALS overwrite attempt detected'); 
  6. // Variables that shouldn't be unset 
  7. $noUnset = array('GLOBALS''_GET''_POST''_COOKIE''_REQUEST''_SERVER''_ENV''_FILES'); 
  8. $input = array_merge($_GET$_POST$_COOKIE$_SERVER$_ENV$_FILES, isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array()); 
  9. foreach ( $input as $k => $v ) 
  10. if ( !in_array($k$noUnset) && isset($GLOBALS[$k]) ) { 
  11. $GLOBALS[$k] = NULL; 
  12. unset($GLOBALS[$k]); 
分享到:
PHP require/include顺序详解 - php高级...
PHP require/include顺序详解 在大型的web项目中, include_path是一个模块化设计的根本中的根本(当然,现在也有很多基于autoload的设计, 这个不影响本文的探讨), 但是正是因为include_path, 经常会让我们遇到一些因为没有找到正确的文件而导致的看似”诡异”的问题.也就有了如下的疑问:includ...
FastCGI 不完全高级指南(PHP版,Windows平...
FastCGI 不完全高级指南(PHP版,Windows平台) 一、FastCGI是什么? FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……