2016-08-21 48 views
1

我目前正在建立一個網站,允許一些沒有太多的用戶輸入。我總是知道什麼樣的角色是允許的,哪些不是。例如,所有的輸入都是字母數字,電子郵件或者有幾個允許的符號,例如。$!? & @ ** - +。 (密碼)filter_input-regexp足夠用於「小自由度」的輸入嗎?

此刻,我總是使用任何輸入之前查了,我這樣做是用PHP的filter_input功能,使用濾鏡一樣

filter_var($post['var'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH); 
filter_input(INPUT_GET, 'id', FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z0-9]*$/") 
filter_input(INPUT_POST, 'password', FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z0-9\.\$\-\_\!\£\@\#\*\:\?\&]+$/")) 

我想以後只使用使用正則表達式進行驗證,因爲它在確定要批准的內容和拒絕的內容方面似乎是最佳選擇。

問題是我有點偏執,所以我想知道是否對於最初解釋的用法(([{「絕不允許例如),只使用驗證是安全的通過

正則表達式。謝謝!

回答

1

假設執行失敗,一些領域的驗證後立即終止,並且您在正則表達式使用白名單的方式,那麼,這將是足夠的。有一些事情(比如電子郵件)可以通過原生PHP函數驗證,但通常沒有理由避免正則表達式。

儘管如此,它並不能保護你免受SQL注入。這件事必須分開處理。

+0

是的,執行是確實終止的,因爲信息通常是繼續進行所必需的。 關於MySQL,是否足夠簡單的準備好聲明? – Dominus

+0

您應該單獨傳遞每個參數,並輸入參數(數字實際上轉換爲數字,字符串被轉義等) - 這是SQL注入預防的一般想法。 –