我正在开发一个与数据库连接的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列表吗?如果是的话,你能和我分享一下吗?
谢谢。
答案 0 :(得分:2)
如果用户在搜索中使用此类元字符,结果可能会或可能不会是灾难性的,但搜索%%
可能会很糟糕。有效搜索%Dogs
也可能无法返回用户期望的结果,这会影响他们的体验。
LIKE
只提供两个元字符,因此您可以在从用户处获取时自行转义它们(只需使用类似Search = Search.replaceAll("%", "\\\\%")
的内容)。