2012-08-22 114 views
2

這是功能我有檢查,如果輸入的安全問題和/或答案包含惡意字符:「怎麼了」的preg_match包括正斜槓

function validate_input($field) { 
    $ErrorMessage = ""; 
    $field = preg_replace("/[\s]+is/", '', $field); 
    if(preg_match("/^[A-Za-z0-9'?!-\s]+$/", $field) ===0) { 
     $ErrorMessage .= "<div class='error_message'>Potentially malicious characters found in:<i> " . $field . ",</i> please enter only alphanumeric characters</div/><br/>"; 
    } return $ErrorMessage; 
} 

當我輸入類似對於這個問題,它返回一個錯誤。當我在($ field)上做一個var_dump時,它會回到「What's up?」。

那麼我怎樣才能將正斜槓作爲可接受的字符?

+0

您是否正在檢查「惡意字符」以防止SQL注入? – Matt

+0

是的,這是主意 – nv39

+1

你應該停止使用'mysql_ *'函數。他們正在被棄用。請使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果你不確定使用哪一個,[閱讀本文](http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/)。當你在兩者中使用準備好的語句時,他們將有助於防止sql注入,從而使上面的代碼變得不必要。 – Matt

回答

2

看起來你有PHP活動的「魔術引用」功能,這不應該是出於安全原因:所有用戶插入數據的轉義應該由您自己的代碼完成。

無論如何,如果你想保持的東西,因爲他們現在的樣子,更換您的

preg_match("/^[A-Za-z0-9'?!-\s]+$/", $field) 

preg_match("/^[A-Za-z0-9'?!-\s\\\\]+$/", $field) 

四倍\是存在的,因爲你需要逃避它兩者在被用雙引號分隔的字符串和正則表達式。

+0

謝謝,我會在幾分鐘內接受答案 – nv39

0

允許正斜槓和其他正常字符的示例。

$string = "J’s Bikes/IHOP"; // bad user input 
    if (!preg_match("/^[[email protected]#$%&()*;:_.'\/\\\\ ]+$/", $string)) { 
     echo "Invalid $string";   
     }