• 技术文章 >后端开发 >php教程

    PHP $_REQUEST数组安全隐患_PHP教程

    2016-07-13 17:10:35原创633
    大家都知道使用$_REQUEST可以直接省去了判断post,get一些代码,使用起来更简单,但是如果要详细的去想我们会觉得$_REQUEST太可怕了。下面看分析。

    我们都知道,处理表单数据,可以使用PHP的$_GET和$_POST这两个超全局变量,具体是哪个由form表单提交时的method指定。除此之外PHP还为我们提供了$_REQUEST数组。但是其不仅包含$_GET和$_POST的所有数据元素,同时其还会包含$_COOKIE这个超全局数组的所有数据元素。
    可是大家有没有想过,如果这三个数组里面的key相同,那么我用$_REQUEST得到的到底是哪个数组的值呢?会不会有什么问题?
    我用如下代码为大家做演示,因为只是想说明问题,所以这里面不对$_COOKIE进行设置,请大家自行处理:

    代码如下 复制代码
    var_dump($_GET['a'],$_POST['a'],$_REQUEST['a']);
    ?>

    demo







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

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

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

    代码如下 复制代码

    ; This directive describes the order in which PHP registers GET, POST, Cookie,
    ; Environment and Built-in variables (G, P, C, E & S respectively, often
    ; referred to as EGPCS or GPC). Registration is done from left to right, newer
    ; values override older values.
    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数组获得

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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP REQUEST 数组 安全 隐患 大家 知道 使用 REQUEST 可以 直接省 去了 判断 post ge
    上一篇:关于PHP文件包含一些漏洞分析_PHP教程 下一篇:php中简单的防CC脚本攻击经验总结_PHP教程

    相关文章推荐

    • PHP 文件操作函数(专题)• PHP教程.经验技巧(上)_PHP教程• PHP重定向的3种方式_PHP教程• PHP控制网页过期时间的代码_PHP教程• [PHP]经常用到的实用函数集合第1/2页_PHP教程

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网