国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP $_REQUEST數組安全隱患

2024-09-04 11:46:23
字體:
來源:轉載
供稿:網友

大家都知道使用$_REQUEST可以直接省去了判斷post,get一些代碼,使用起來更簡單,但是如果要詳細的去想我們會覺得$_REQUEST太可怕了,下面看分析.

我們都知道,處理表單數據,可以使用PHP的$_GET和$_POST這兩個超全局變量,具體是哪個由form表單提交時的method指定,除此之外PHP還為我們提供了$_REQUEST數組,但是其不僅包含$_GET和$_POST的所有數據元素,同時其還會包含$_COOKIE這個超全局數組的所有數據元素.

可是大家有沒有想過,如果這三個數組里面的key相同,那么我用$_REQUEST得到的到底是哪個數組的值呢?會不會有什么問題?

我用如下代碼為大家做演示,因為只是想說明問題,所以這里面不對$_COOKIE進行設置,請大家自行處理,代碼如下:

  1. <?php 
  2.        var_dump($_GET['a'],$_POST['a'],$_REQUEST['a']); 
  3. ?> 
  4. <html> 
  5. <head><title>demo</title></head> 
  6. <body>//開源代碼Vevb.com 
  7.         <form method= 'post' action = 'req.php?a=xxx'
  8.                 <input type='hidden' name='a' value='yyy'/> 
  9.                 <input type='submit' name='submit' value='submit'/> 
  10.         </form> 
  11. </body> 
  12. </html> 

當我提交表單的時候,我獲取的頁面內容為:

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數組獲取內容的優(yōu)先級,其字母的含義分別代表為:E代表$_ENV,G代表$_GET,P代表$_POST,C代表$_COOKIE,S代表$_SESSION。后面出現的數據會覆蓋前面寫入的數據,其默認的數據寫入方式就是EGPCS,所以POST包含的數據將覆蓋GET中使用相同關鍵字的數據.

$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比較慢,通過post和get方法提交的所有數據都可以通過$_REQUEST數組獲得.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙泉市| 息烽县| 和硕县| 安龙县| 长沙县| 柞水县| 阿荣旗| 广平县| 汉寿县| 乡城县| 江陵县| 淅川县| 祁门县| 郑州市| 海兴县| 平塘县| 达拉特旗| 北川| 德州市| 同德县| 紫金县| 军事| 东乡县| 铜梁县| 曲水县| 庆阳市| 南和县| 辉南县| 桑植县| 来宾市| 武冈市| 鄢陵县| 印江| 台山市| 涿州市| 利津县| 永善县| 南澳县| 隆尧县| 游戏| 曲靖市|