過濾來自用戶(POST和GET)的輸入以避免SQL注入和此類事情的行業標準是什麼。到目前爲止,我使用filter_input()和mysql_real_escape_string()函數?這是否足夠,如果不是,我應該使用其他什麼方法?如何在PHP中正確過濾來自用戶的輸入?
回答
生活的重要規則是FIEO。過濾輸入轉義輸出。
您從用戶處獲取並存儲的任何信息都必須經過服務器端過濾,爲此,您應該使用mysql_real_escape_string
。在將值添加到數據庫之前,它總是應該是最後一件事。驗證用戶輸入,確保它是你想要的,如果你需要使用正則表達式,檢查它的長度和任何其他規則,刪除任何符號或標籤 - 完成所有這些,然後應用MySQL函數mysql_real_escape_string
。
您在網頁上顯示的任何動態信息 - 即來自用戶生成內容的數據庫或直接來自用戶輸入的信息都必須轉義。您必須對任何符號進行URL編碼,移除(或編碼)任何HTML標籤。
我強烈建議你通過專家克里斯·夏夫利特觀看網絡安全這個演示:
http://www.slideshare.net/shiflett/evolution-of-web-security
我建議你使用的數據庫LIB在這種方法將數據保存到像梨分貝CakePHP的ORM
數據庫你真的確定並指出可以攻擊你的分貝注射
逃逸避免SQL注入和篩選或驗證輸入是兩個不同的東西。您不需要過濾輸入以避免SQL注入,並且過濾輸入不一定有助於防止SQL注入。
爲避免SQL注入,您將輸入轉義出來,以免混淆查詢的語法,或者使用準備好的語句完全避免該問題。這個輸入包含什麼並不重要,不管它是否被過濾。如果您使用適當的數據庫轉義函數或使用準備好的語句轉義一次,那麼您會擔心SQL注入。
您根據不同的原因過濾或驗證輸入,主要是因爲您不想允許數據庫中的某些值。這與將這些值放入數據庫(SQL注入可能發生的位置)的方式完全不同。
在輸出你需要躲避值根據您的輸出介質,以及,出於同樣的原因,你在一個SQL查詢時,把他們逃脫他們:避免搞亂了語法,這可以被利用。即當輸出到網頁時,您的HTML將跳過您的值。再一次,它的價值無關緊要。如果它正確地逃脫了,它可以是任何東西。
您可以在php中使用PDO進行數據庫連接。 PDO代表PHP數據對象。它比mysql_connect更好。 PDO是面向Objetc的,同時它確保了更多的保護。
http://www.php.net/manual/en/class.pdo.php
$link = new PDO ($dsn, $user, $password, $options) ;
使用htmlspecialchars來編碼可能導致問題的字符。驗證數據是不同的,這取決於您對輸入字段的期望。
- 1. PHP中的用戶輸入過濾
- 2. 如何過濾來自文件的輸入? (PHP)
- 3. 如何忽略來自用戶通過URL輸入的輸入使用php
- 4. 如何在php中正確檢查用戶輸入?
- 5. PHP - 當過濾用戶輸入
- 6. 如何使用用戶輸入過濾來自XML文件的數據C#
- 7. c中的簡單GCD程序,無法過濾來自掃描儀的正確用戶輸入
- 8. 瞭解如何使用PHP過濾來自表單的惡意輸入
- 9. 過濾用戶輸入
- 10. 過濾用戶輸入
- 11. KnockoutJS - 過濾用戶輸入
- 12. 如何使用PHP輸入來獲得正確的XML佈局
- 13. 如何在C++中正確使用用戶輸入的參數
- 14. 通過語音輸入來自用戶
- 15. 來自用戶的輸入
- 16. 比較來自文件的輸入和來自用戶php的輸入
- 17. 如何限制用戶輸入劍道過濾器輸入?
- 18. 如何將來自用戶php的輸入與MySQL的輸入進行比較
- 19. 如何過濾Angular 2中的用戶輸入上的數組
- 20. 在元組上使用python正則表達式來過濾用戶輸入
- 21. 在PL/SQL過程中獲取來自用戶的輸入
- 22. 如何接受用戶的輸入來過濾XML文檔?在XSLT
- 23. 如何解析來自標準輸入流的用戶輸入?
- 24. 如何將來自用戶的輸入存儲在數組中?
- 25. 如何在bash子shell中讀取來自用戶的輸入
- 26. 如何在JOptionPane中允許來自用戶的多個輸入
- 27. 通過用戶輸入過濾ObservableCollection
- 28. 如何正確過濾?
- 29. 如何正確過濾ArrayController
- 30. 如何在Python中過濾和格式化來自輸入函數的數據?
似乎對我很好,只是別忘了驗證/消毒東西。我做的唯一不同的是使用PDO而不是mysql_ *。部分原因是,您不太可能讓某些事情因爲您在PDO強制清理過程中發生SQL查詢的值而出現漏洞。 – erisco 2011-02-23 05:45:34
@erisco您能否詳細說明PDO以及您如何處理它? – miki725 2011-02-23 06:02:27
我可能可以,但http://php.net/manual/en/pdostatement.execute.php已經有很好的例子了。 PDO非正式地成爲PHP中數據庫訪問的標準。 – erisco 2011-02-23 06:04:20