當用戶的輸入被插入到MySQL查詢中時,用戶輸入中應該替換的危險字符是什麼?我知道引號,雙引號,\ r和\ n。有其他人嗎?
(我沒有選擇使用接受參數的智能連接器,所以我必須自己構建查詢,這將用多種編程語言實現,包括一些模糊的語言,因此PHP中的mysql_real_escape_string
等解決方案無效)消毒MySQL用戶參數
4
A
回答
7
mysql_real_escape_string()從mysql.com文檔:
在從被編碼爲一個轉義SQL字符串,考慮到當前的字符集的連接的字符串。結果放入並附加一個終止空字節。編碼的字符是NUL(ASCII 0),「\ n」,「\ r」,「\」,「'」,「」「和Control-Z(見第8.1節」文字值「)(嚴格來說, MySQL的只要求反斜槓和用於引用查詢字符串引號字符轉義。這個函數引用了其他字符,使他們更容易閱讀的日誌文件。)
mysql_real_escape_string( )是字符集意識到的,所以複製它的所有能力(特別是針對多字節攻擊問題)不是一個小數目。
從http://cognifty.com/blog.entry/id=6/addslashes_dont_call_it_a_comeback.html:
AS = addslashes() MRES = mysql_real_escape_string() ACS = addcslashes() //called with "\\\000\n\r'\"\032%_" Feature AS MRES ACS escapes quote, double quote, and backslash yes yes yes escapes LIKE modifiers: underscore, percent no no yes escapes with single quotes instead of backslash no yes*1 no character-set aware no yes*2 no prevents multi-byte attacks no yes*3 no
4
您需要支持哪些語言?使用語言的內置消毒功能比編寫自己的消毒更好。
編輯:上php.net看mysql_real_escape_string
:
mysql_real_escape_string()
調用MySQL的庫函數mysql_real_escape_string
,其中前添加反斜槓以下字符:\x00
,\n
,\r
,\
,'
,"
和\x1a
。
相關問題
- 1. mysql消毒行名
- 2. asp.net消毒用戶輸入
- 3. 從processAction獲取消毒參數 - Liferay
- 4. 用Ruby on Rails消毒用戶輸入
- 5. PHP/MySQL的:消毒用戶輸入 - 這是一個壞主意?
- 6. 消毒數據庫
- 7. 消毒SQL數據
- 8. 消毒HTML數據
- 9. 消毒用戶正則表達式
- 10. 消毒前的用戶輸入驗證?
- 11. 簡單的用戶輸入消毒
- 12. 消毒用戶輸入路徑名稱
- 13. zend框架消毒數據
- 14. Ruby - Open3 popen3函數消毒
- 15. 消毒PHPSESSID
- 16. VBScript SQL消毒
- 17. 消毒在Perl
- 18. JavaScript消毒庫
- 19. 消毒Vaadin RichTextArea
- 20. 消毒整數時使用intval&real_escape_string
- 21. 使用XSLT消毒數據庫輸入
- 22. 消毒用角翻譯
- 23. 使用PDO消毒變量
- 24. 用於HTML消毒的庫
- 25. 使用php消毒JSON
- 26. 使用AEM消毒輸入
- 27. TextArea數據在存儲於MySQL之前進行消毒
- 28. 輸入消毒和參數化查詢是否互斥?
- 29. 消毒$ _GET參數,以避免XSS和其他攻擊
- 30. PHP消毒問題
@eyelidlessness:PHP,C#.NET 3.0的Java,VB和C(實際上是一個語言自主開發的房子,這是在做什麼它不是專爲太可怕了,但它支持注入C函數爲「特殊」代碼) – Tom 2008-10-23 14:29:18
我其實找到了語言特定的內置轉義函數,但找不到任何相關的C#.NET文檔。如果沒有好的在線文檔,新開發人員應該如何處理它? – eyelidlessness 2008-10-23 14:43:06
如果您在任何時候回來,請切換接受的答案。 micahwittman's比我好。 – eyelidlessness 2009-03-06 08:42:24