我正在從用戶輸入中取出一個字符串,並將它以空格分隔(使用\ w)到一個字符串數組中。然後,我通過數組循環,並追加像這樣在where子句中的一部分:通過將沒有空白的輸入附加到我的查詢中,我是否容易受到SQL注入的影響?
query += " AND ("
+ "field1 LIKE '%" + searchStrings[i] +"%' "
+ " OR field2 LIKE '%" + searchStrings[i] +"%' "
+ " OR field3 LIKE '%" + searchStrings[i] +"%' "
+ ") ";
我覺得這是很危險的,因爲我追加用戶輸入我的查詢。但是,我知道任何搜索字符串中都沒有空格,因爲我將初始輸入分割爲空白。
是否有可能通過SQL注入攻擊?給Robert');DROP TABLE students;--
實際上不會放任何東西,因爲那裏需要有空白。在那個例子中,它不會正常工作,但不會造成損害。
任何人有更多的經驗打擊SQL注入幫助我解決這個問題,或讓我放心嗎?
謝謝!
編輯:
哇,這是一個很多偉大的投入。謝謝大家回覆。我將調查全文搜索,並至少參數化我的查詢。
只是這樣我可以更好地理解問題,如果所有空白和單引號都逃脫了,是否可以注入?
\ w覆蓋所有可協調的空格嗎? 在使用它之前嘗試清洗用戶數據似乎更安全, – Alan 2008-12-16 22:14:24
正如其他人已經說明的那樣,您仍然容易受到SQL注入的攻擊,因此您應該避開搜索字符串。但我也想發表評論,你應該使用全文搜索引擎而不是所有這些通配符搜索! – 2008-12-16 22:44:26
您仍然可以使用ASCII特徵對單引號進行編碼,所以我甚至會說,不要冒險! – BenAlabaster 2008-12-17 15:51:48