我正在开发一个与数据库连接的 Java 桌面应用程序,我想知道下一个。结果据我所知,准备好的语句避免了 SQL 注入(inject),而你不直接连接用户数据,但今天我发现它不会转义字符串正则表达式(比如 LIKE 运算符中的 '%', ) 因为它只是转义字符,这些字符可能会破坏 String 本身并改变查询。所以,如果用户这样做:
Search = "%Dogs"; // User input
Query = "SELECT * FROM Table WHERE Field LIKE ?";
blah.setString(1, Search);
它将通过注入(inject)返回所有开头包含'Dogs'的行。
现在我问:
1-) 从全局角度来看,这是不好的/危险的事情吗?
2-) 是否有 Mysql 可以从字符串内部使用的正则表达式的完整列表?如果是这样,你能和我分享一下吗?
谢谢。
最佳答案
如果用户在他们的搜索中使用这样的元字符,结果可能会或可能不会是灾难性的,但搜索 %%
可能会很糟糕。对 %Dogs
的有效搜索也可能不会返回用户期望的结果,这会影响他们的体验。
LIKE
仅提供两个元字符,因此您可以在从用户那里获取时自行转义它们(只需使用类似于 Search = Search.replaceAll("%", "\\\\%")
的东西) ).
关于Mysql,处理字符串正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825130/