我正在開發一個PHP函數來處理來自Web表單的提交。使用preg_replace進行PHP安全性
允許的字符嚴格爲字母數字,a-b,0-9。
在處理和插入數據庫之前,依靠preg_replace和正則表達式來清理此數據是否安全?
我已經看過很多關於正常PHP數據清理選項的內容,但是由於系統設計嚴格禁止使用非字母數字字符,所以我認爲這將更容易去除任何不符合從一開始就匹配/[^a-zA-Z\s-0-9.,']/。
我在正確的軌道上嗎?
我正在開發一個PHP函數來處理來自Web表單的提交。使用preg_replace進行PHP安全性
允許的字符嚴格爲字母數字,a-b,0-9。
在處理和插入數據庫之前,依靠preg_replace和正則表達式來清理此數據是否安全?
我已經看過很多關於正常PHP數據清理選項的內容,但是由於系統設計嚴格禁止使用非字母數字字符,所以我認爲這將更容易去除任何不符合從一開始就匹配/[^a-zA-Z\s-0-9.,']/。
我在正確的軌道上嗎?
如果您只允許字母數字字符存儲在您的數據庫中,而不是剝離無效字符,則最好向用戶返回一個錯誤,以提供無效輸入。這樣,用戶在看到他們的數據以不同於最初輸入的形式顯示給他們時,不會感到困惑。
換言之,使用preg_match()
驗證輸入以確保它符合您的要求,如果沒有,請將錯誤返回給用戶以便他們修復它。然後將其轉義以插入到數據庫中或使用準備好的語句。
if (!preg_match('/^[a-z0-9., ]$/i', $input)) {
// error Invalid input. Please use only letters and numbers
}
else {
// call escape function on $input or insert it with a prepared statement
// whatever is the appropriate method for your RDBMS api.
}
需要'/ i'。雖然我更喜歡'if(preg_match('/^[\ W _] $ /',$ input)){ – DaveRandom
您顯示的正則表達式不是嚴格的字母數字。在存儲到數據庫中之前,您肯定應該轉義(如果您尚未使用準備好的語句)。 – kapa