Mysql,处理String Regex

时间:2013-05-29 22:43:12

标签: mysql regex security code-injection

我正在开发一个与数据库连接的Java桌面应用程序,我想知道下一个。结果是据我所知,Prepared Statements避免了SQL注入而你没有直接连接用户数据,但今天我发现它没有转义String regex(比如LIKE运算符的'%',因为它只是转义了可能破坏String本身并改变查询的字符。所以,如果用户这样做:

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

它将通过注入返回包含'Dogs'的所有行。

现在我问:

1-)从全球角度看这是不好/危险的事情吗?

2-)Mysql可以在String中使用完整的Regex列表吗?如果是的话,你能和我分享一下吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

如果用户在搜索中使用此类元字符,结果可能会或可能不会是灾难性的,但搜索%%可能会很糟糕。有效搜索%Dogs也可能无法返回用户期望的结果,这会影响他们的体验。

LIKE只提供两个元字符,因此您可以在从用户处获取时自行转义它们(只需使用类似Search = Search.replaceAll("%", "\\\\%")的内容)。