<?php//如果环境是php5并且屏蔽了长格式的预定义变量,就进行模仿长格式预定义变量。if(@phpversion()>='5.0.0'&&(!@ini_get('register_long_arrays')||@ini_get('register_long_arrays')=='0'||strtolower(@ini_get('register_long_arrays'))=='off')){$HTTP_POST_VARS=$_POST;$HTTP_GET_VARS=$_GET;$HTTP_SERVER_VARS=$_SERVER;$HTTP_COOKIE_VARS=$_COOKIE;$HTTP_ENV_VARS=$_ENV;$HTTP_POST_FILES=$_FILES;//判断$_SESSION是否已经注册生效if(isset($_SESSION)){$HTTP_SESSION_VARS=$_SESSION;}}//防范注入GLOBALS变量if(isset($HTTP_POST_VARS['GLOBALS'])||isset($HTTP_POST_FILES['GLOBALS'])||isset($HTTP_GET_VARS['GLOBALS'])||isset($HTTP_COOKIE_VARS['GLOBALS'])){die("Hackingattempt");}//防范$HTTP_SESSION_VARS伪装if(isset($HTTP_SESSION_VARS)&&!is_array($HTTP_SESSION_VARS)){die("Hackingattempt");}//以下代码在环境register_globals=on时模拟offif(@ini_get('register_globals')=='1'||strtolower(@ini_get('register_globals'))=='on'){//不应该被unset的,并且预定义变量数组中也不包含的变量名,如果外来数据中存在就是访问者注入的!$not_unset=array('HTTP_GET_VARS','HTTP_POST_VARS','HTTP_COOKIE_VARS','HTTP_SERVER_VARS','HTTP_SESSION_VARS','HTTP_ENV_VARS','HTTP_POST_FILES');//如果HTTP_SESSION_VARS变量未被初始化或不是数组,array_merge函数将失败,所以需要核实HTTP_SESSION_VARSif(!isset($HTTP_SESSION_VARS)||!is_array($HTTP_SESSION_VARS)){$HTTP_SESSION_VARS=array();}//合并为一个大数组,数组中包含各种外来变量$input=array_merge($HTTP_GET_VARS,$HTTP_POST_VARS,$HTTP_COOKIE_VARS,$HTTP_SERVER_VARS,$HTTP_SESSION_VARS,$HTTP_ENV_VARS,$HTTP_POST_FILES);//防止伪装数组unset($input['input']);unset($input['not_unset']);//所有的名字未列入$not_unset数组的外来变量将被unset,列入的停止执行页面while(list($var,)=@each($input)){//如果访问者注入了与预定义变量同名的变量if(in_array($var,$not_unset)){die('Hackingattempt!');}//echo$var.'<br>';unset($$var);}unset($input);}?>