4

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

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

它将通过注入返回所有开头包含“Dogs”的行。

现在我问:

1-) 从全球角度来看,这是否是一件坏事/危险的事情?

2-) 是否有 Mysql 可以从字符串中使用的完整正则表达式列表?如果是这样,你能和我分享一下吗?

谢谢你。

4

1 回答 1

2

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

LIKE仅提供两个元字符,因此您可以在从用户那里获得它们时自行转义它们(只需使用类似于 的东西Search = Search.replaceAll("%", "\\\\%"))。

于 2013-05-29T22:55:08.633 回答