我已經閱讀了許多關於如何過濾字符串爲「字母數字」的其他問題,但他們都提出了preg_replace()
方法。從用戶輸入中獲取字母數字字符串的安全方法? (without preg_replace)
根據OWASP:
功能的preg_replace()不應該與unsanitised用戶 輸入被使用,因爲有效載荷將是EVAL()」 ED13。 preg_replace(「/.*/ e」,「system('echo/etc/passwd')」);
反射也可能 有代碼注入缺陷。由於它是一個高級主題,因此請參閱相應的反映文檔。
那麼現在如何實現這個沒有preg_replace?
$result = preg_replace("/[^a-zA-Z0-9]+/", "", $_POST['data']);
// Notice the $_POST['data']
如果數據是無效的,那麼爲什麼還要對其進行篩選?只要拒絕它:'$ result = ctype_alnum($ _ POST ['data'])? $ _POST ['data']:null;' –
'filter_input()'或'filter_var()' – cmorrissey
@cmorrissey嘗試了filter_函數,我用很多標誌/過濾器試過了,但是輸出結果從來沒有像上面那樣。例如:'filter_var($ string,FILTER_SANITIZE_STRING,FILTER_FLAG_ENCODE_HIGH)' – Vladimir