2016-06-14 82 views
-2

我正在編寫一個代碼,用於處理註冊表單中的用戶文本輸入。我已實現了以下功能,確保輸入的數據是安全的:使用PHP進行安全輸入數據處理

function input_check($Indata, $dbc) {  // input_check($Indata, $dbc) 
    $Indata = trim($Indata);    // remove white spaces 
    $Indata = stripslashes($Indata);  // remove back slashes 
    $Indata = strip_tags($Indata);   // remove html tags 
    $Indata = htmlspecialchars($Indata); // convert html entities 
    $Indata = mysql_real_escape_string($Indata,$dbc); 
    return $Indata; 
} 

有,我有,爲了做到以確保輸入是安全的任何其他處理?

我的意思是安全的惡意輸入數據

+0

安全地做什麼? –

+1

是的,有'base64_encode()'! –

+0

'base64_encode''非常好,我經常稱之爲'base_sexy_4_encoding'來分享我對這個美好functon的熱愛':-)' – Martin

回答

1

你的戰略,利用一切可能的逃逸機制可能是安全的,但會使你的應用程序太複雜 - 想象一下,你需要做的,使用的數據(這似乎稍後存儲在MySQL數據庫中,對嗎?)稍後將其以HTML格式打印出來。

更明智的做法是,根據用途的數據的只使用足夠逃逸機制:

  • 將數據存儲在一個MySQL數據庫,使用數據庫逃逸機制(順便說一句,而不是mysql_real_escape_string()它已過時,使用PDO::quote()甚至更​​好的使用parameter binding這已經沒有逃脫你)
  • 打印在HTML文本中存儲的數據使用htmlspecialchars(),可能連同strip_tags()
  • 打印在HTML屬性存儲數據使用htmlspecialchars()urlencode()

...等等。那麼你很可能會安全的SQL注入,XSS攻擊等。

+0

雖然這是一個很好的答案,但我建議在'htmlspecialchars'上使用'htmlentities',因爲它是更完整(但這可能不是一個殺手)。 – Martin

+1

不,不要使用strip_tags,只是htmlspecialchars。並確保使用標誌ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED – hanshenrik

+0

感謝每一位您的貢獻。特別感謝Joachim Schirrmacher爲您的時間擴展您的答案,這非常有幫助 –