2010-09-05 111 views
26

我有一個很多變量的表單,然後發送一封電子郵件,而不是通過filter_var($_POST['var'], FILTER_SANITIZE_STRING);來清除每個$_POST的值。我之後是一段更簡單的代碼。我想出了下面這個,似乎工作,因爲我相信默認行動是FILTER_SANITIZE_STRING,但我只是想知道人們的意見是什麼,如果這不是好的做法,也許你可以告訴我爲什麼?該$_POST值然後分別嵌入到新的變量,所以我只會使用array_map只是在開始清理一切......

$_POST = array_map('filter_var', $_POST); 

謝謝您的回覆,給你更多的信息,基本上:

我有一個形式20-30的輸入字段正被捕獲, 數據隨後被顯示給用戶,以檢查它們的輸入, 變量然後消毒, 用戶然後被髮送的電子郵件 和然後最後的細節輸入到數據庫。

目前我在發送電子郵件之前使用上述array_map函數以及電子郵件地址上的FILTER_SANITIZE_EMAIL進行消毒,然後在插入數據庫之前使用mysql_real_escape_string()轉義輸入。沒有深入準備好的聲明等,你認爲我應該另外做些什麼嗎?再次感謝!

+0

消毒串的嵌套數組,這裏是一個有用的功能 - http://stackoverflow.com/questions/3126072/what-are-the-best-php-input-sanitizing-functions/20403438#20403438 – 2014-09-23 13:14:28

+0

可能重複的[PHP -Sanitize值的AR ray](http://stackoverflow.com/questions/4861053/php-sanitize-values-of-a-array) – feeela 2014-10-23 10:17:38

回答

14

取決於它的用途。

如果你將它插入到數據庫中,然後mysql_real_escape_string()對於帶引號的字符串和對數字進行類型轉換將是要走的路 - 理想準備好的語句,但這完全是另一回事。

如果你打算將數據輸出到網頁,那麼我會建議像htmlspecialchars()

如果你打算使用用戶輸入作爲外殼的說法,那麼你可以使用escapeshellarg()

移動到您的關於發送電子郵件的問題。那麼,下面應該就足夠了:

filter_var($_POST['message'], FILTER_SANITIZE_STRING); 

所有這一切基本上是條形碼標籤和編碼特殊字符。

+1

很好的答案。我只是補充一點,如果你打算允許用戶輸入你的網頁,可以考慮使用strip_tags()來防止人們投擲

4

沒有正確的方法來做一攬子衛生。你需要什麼衛生方法取決於對數據做了什麼。

在使用之前直接對數據進行消毒。

+0

謝謝,我意識到這一點,我只是試圖達到這個沒有寫很多重複的代碼... – SirG 2010-09-06 10:27:04

+0

@SirG:由al意味着驗證輸入,但你應該只應用當數據離開時,將數據清理轉換爲PHP數據,並且該方法應該適合數據的去向(mysql_real_escape_string(),htmlentities(),urlencode(),base64)_encode(),escapeshellarg(),addslashes( )....等所有做**不同**事情) – symcbean 2010-09-06 11:26:49

+0

@symcbean,感謝您的答案,那麼filter_var將適用於通過PHP的郵件功能發送電子郵件之前?乾杯。 – SirG 2010-09-12 11:08:58

55

如果您的每一個輸入變量的類型是一個字符串,你想一次消毒所有這些,你可以使用:

// prevent XSS 
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING); 
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 

這將淨化你的$ _GET和$ _POST數組。

這裏看到:PHP -Sanitize values of a array

0

這是我在所有項目中使用:

function util_array_trim(array &$array, $filter = false) 
{ 
    array_walk_recursive($array, function (&$value) use ($filter) { 
     $value = trim($value); 
     if ($filter) { 
      $value = filter_var($value, FILTER_SANITIZE_STRING); 
     } 
    }); 

    return $array; 
} 

它允許修剪和消毒發佈的數據

相關問題