2013-05-29 72 views
4

我正在開發一個與數據庫連接的Java桌面應用程序,我想知道下一個。它的結果是,據我所知,Prepared Statements避免SQL注入,而你不直接連接用戶數據,但今天我發現它不會轉義String正則表達式(如LIKE運算符中的'%' ),因爲它只是轉義可能會破壞字符串本身並改變查詢的字符。因此,如果用戶確實如此:處理字符串正則表達式的Mysql

Search = "%Dogs"; // User input 
Query = "SELECT * FROM Table WHERE Field LIKE ?"; 
blah.setString(1, Search); 

它將通過注入返回包含「狗」的所有行。

現在我要問:

1)這是一件壞事/危險觀看從全球的角度?

2-)有一個正則表達式的完整列表,Mysql可以在字符串內使用嗎?如果是這樣,你可以與我分享嗎?

謝謝。

+0

這不是正則表達式,就是LIKE.maybe你的意思是RLIKE – Bohemian

+0

可能的重複[使用MySQL搜索:如何轉義通配符](http://stackoverflow.com/questions/4588424/searching-using-mysql-how-to -escape-wildcards) –

+0

@Bohemian「LIKE」的文檔確實會說「使用SQL簡單正則表達式比較進行模式匹配」。 –

回答

2

如果用戶在其搜索中使用這些元字符,結果可能是災難性的,也可能不是災難性的,但搜索%%可能是不好的。對%Dogs的有效搜索也可能不會返回用戶預期會影響其體驗的結果。

LIKE只提供了兩個元字符,所以當你從用戶處獲得這些字符時,你可以自己將它們轉義出來(簡單地使用類似於Search = Search.replaceAll("%", "\\\\%")的東西)。

+0

同意,除了LIKE之外,還有其他一些運算符/函數/ etc是否可以評估這樣的表達式? – Neo

+0

@Neo不喜歡,但有'RLIKE' –