我一直在使用PHP一段時間,我開始問自己,如果我養成良好的習慣。消毒PHP變量,我過度使用它嗎?
其中之一是我相信了由過度使用PHP的消毒方法,例如,一個用戶通過表單註冊時,我得到了下面的帖子變量:
$_POST['name']
,$_POST['email']
和$_POST['captcha']
。現在,我通常所做的顯然是清理我將要放入MySQL的數據,但是在比較驗證碼時,我也會對其進行清理。因爲我相信我誤解了PHP消毒,我很好奇,有什麼其他的情況,當你需要清理數據,除了使用它來放置在MySQL中的東西(注意我知道消毒也是需要防止XSS攻擊) 。而且,我的習慣是消除幾乎每個來自用戶輸入的變量,一個糟糕的變量?
永遠不要相信用戶輸入是最好的習慣之一。數據庫注入是顯而易見的原因,但還有其他一些。 eval()語句,動態類創建$ x = new $ classnamehere()等 – STLMikey 2014-10-27 21:25:20
所有用戶輸入/外部輸入都有潛在危險,所以如果 - 例如 - 你將captcha值與內部字符串進行比較,一些(儘管很小)的風險是,傳入的價值可能會「欺騙」並以某種方式通過比較邏輯。有了這個說法,是的,一些輸入需要比其他輸入消毒更多,因爲一些數據用於高風險場景。如果可能的話,我建議通過一些通用函數清理所有用戶輸入,並使用MySQLi或PDO自動轉義任何數據來抵禦注入風險。 – Anthony 2014-10-27 21:29:36
我相信這是一個好習慣,事實上 - 我相信你的應用程序不應該觸及任何用戶輸入的數據,而不會首先進行消毒處理 - 我有一個類通過post/get請求循環並生成消毒版本,然後我可以訪問它們 – 2014-10-27 21:30:18