Mysql,处理字符串正则表达式

标签 mysql regex security code-injection

我正在开发一个与数据库连接的 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/

相关文章:

长复杂字符串的Python正则表达式

spring - 白标平台的安全共享登录

MySql "Many to One"表设计

c# - 使用 RegEx 从字符串中删除编码的 HTML

python - 正则表达式 - `^`、 `$` 和 `\A`、 `\Z` 之间的差异

javascript - Ajax beforesend 方法在某些情况下不起作用

python - 如何在 Python 的 Flask 中正确安全地处理 cookies 和 session?

mysql - 查看 MySQL 中的所有表/数据库约束

mysql - 无法在 MySQL 5.7 中将所有权限授予 root。语法错误

mysql - 在 MySQL 中格式化小数,不带前导 0