2009-12-11 105 views
0

對於我的框架,我想清空/禁用REQUEST數組出於安全原因,用戶應該只使用適當的數組,如POST,GET或COOKIE。但我不知道該怎麼做。即使像下面似乎不工作,它甚至將會清空GET POST等如何清空REQUEST數組?

$temp_get = $_GET; 
$temp_post = $_POST; 
$temp_cookie = $_COOKIE; 
// empty request array 
$_REQUEST = array(); 
$_GET = $temp_get; 
$_POST = $temp_post; 
$_COOKIE = $temp_cookie; 
+0

難道人們就是這麼笨嗎?我不這麼認爲,$ _REQUEST在某些情況下是有用的。相反,你正在浪費額外的CPU時間,不會帶來任何價值。 – 2009-12-11 11:11:47

回答

1

在這裏做正確的做法是使用來代替所有這些函數/變量$ _REQUEST及其正確的方法。堅持約定,GET拉,POST插入數據,不要忘記$ _COOKIE。

如果您不從$ _REQUEST獲取輸入,您將爲自己節省很多麻煩。爲了安全起見,請記住要逃避任何可能被篡改的輸入(_GET,POST,_COOKIE,並且不要忘記一些討厭的_SERVER變量)。

+0

不能得到你的親愛的,看來我不是在尋找這個答案:) – Sarfraz 2009-12-11 06:22:28

1

嘗試做

unset($_REQUEST); 
+1

這是沒用的,它會清空所有東西,甚至可以發帖子和cookie – Sarfraz 2009-12-11 06:20:59

+2

這個,沒有。 $ _REQUEST是$ _GET的獨立數組。你甚至測試過這個嗎? – Slashterix 2009-12-24 01:17:35

1

這樣的解決方案會工作嗎?

<?php 

class Request 
{ 
    public static $get, $post, $cookie; 

    public function __construct() 
    { 
     self::$get = $_GET; 
     self::$post = $_POST; 
     self::$cookie = $_COOKIE; 
    } 
} 

new Request(); 
$_REQUEST = array(); 
print_r(Request::$get); 

您可以通過給test.php的測試嗎?A = B & C = d

+0

這太複雜了。 – Slashterix 2009-12-24 01:23:02

+0

這實際上幫助我更好地理解他們,謝謝! – happy 2015-12-14 01:12:17

0

你能遍歷$_GET$_POST$_COOKIE,保存自己的數據,然後清除$_REQUEST

$tget = array(); 
foreach($_GET as $k=>$v) 
{ 
    $tget[$k] = $v; 
} 

$tpost = array(); 
foreach($_POST as $k=>$v) 
{ 
    $tpost[$k] = $v; 
} 

$tcookie = array(); 
foreach($_COOKIE as $k=>$v) 
{ 
    $tcookie[$k] = $v; 
} 

unset($_REQUEST); 

$_GET = $tget; 
$_POST = $tpost; 
$_COOKIE = $tcookie; 
+0

將不得不嘗試。 – Sarfraz 2009-12-11 06:47:35

+0

該解決方案的問題在於新變量在範圍上本質上不是全局變量。 – whichdan 2009-12-11 06:50:35

+0

好點。 (15個字符) – 2009-12-11 09:13:09