php专区

 首页 > php专区 > PHP基础 > 数组 > PHP $_REQUEST数组安全隐患 - php数组

PHP $_REQUEST数组安全隐患 - php数组

分享到:
【字体:
导读:
          大家都知道使用$_REQUEST可以直接省去了判断post,get一些代码,使用起来更简单,但是如果要详细的去想我们会觉得$_REQUEST太可怕了,下面看分析.我们都知道,处理表单数据,可以使用PHP的$_GET和...

PHP $_REQUEST数组安全隐患

大家都知道使用$_REQUEST可以直接省去了判断post,get一些代码,使用起来更简单,但是如果要详细的去想我们会觉得$_REQUEST太可怕了,下面看分析.

我们都知道,处理表单数据,可以使用PHP的$_GET和$_POST这两个超全局变量,具体是哪个由form表单提交时的method指定,除此之外PHP还为我们提供了$_REQUEST数组,但是其不仅包含$_GET和$_POST的所有数据元素,同时其还会包含$_COOKIE这个超全局数组的所有数据元素.

可是大家有没有想过,如果这三个数组里面的key相同,那么我用$_REQUEST得到的到底是哪个数组的值呢?会不会有什么问题?

我用如下代码为大家做演示,因为只是想说明问题,所以这里面不对$_COOKIE进行设置,请大家自行处理,代码如下:

  1.        var_dump($_GET['a'],$_POST['a'],$_REQUEST['a']); 
  2. ?> 
  3.  
  4. demo 
  5. //开源代码phpfensi.com 
  6.         'post' action = 'req.php?a=xxx'
  7.                 'hidden' name='a' value='yyy'/> 
  8.                 'submit' name='submit' value='submit'/> 
  9.          
  10.  
  11.  

当我提交表单的时候,我获取的页面内容为:

string(3) "xxx" string(3) "yyy" string(3) "yyy"

同样的内容,在$_REQUEST里面,POST的值覆盖了GET的值,这到底是怎么回事呢?其实这是在PHP的配置文件里面设置的,让我们来看一下php.ini这个配置文件,在第466行左右有如下内容:

  1. ; This directive describes the order in which PHP registers GET, POST, Cookie, 
  2. ; Environment and Built-in variables (G, P, C, E & S respectively, often 
  3. ; referred to as EGPCS or GPC).  Registration is done from left to right, newer 
  4. ; values override older values. 
  5. variables_order = "EGPCS" 

这个EGPCS就是说明用$_REQUEST数组获取内容的优先级,其字母的含义分别代表为:E代表$_ENV,G代表$_GET,P代表$_POST,C代表$_COOKIE,S代表$_SESSION。后面出现的数据会覆盖前面写入的数据,其默认的数据写入方式就是EGPCS,所以POST包含的数据将覆盖GET中使用相同关键字的数据.

$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢,通过post和get方法提交的所有数据都可以通过$_REQUEST数组获得.

分享到:
php获取表单数组的数据方法 - php数组
php获取表单数组的数据方法 这是我之前写的一段form代码:                                                                                                    ...
php中数组写入文件方法 - php数组
php中数组写入文件方法 在php中为我们提供了一个函数var_export 他可以直接将php代码入到一个文件中,代码如下: var_export($times,true);//后面不加true不能写入文件哟  $fp = fopen('aa.txt','w+');  fwrite($fp,var_export($times,true));  fclose($fp...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……