Mysql,处理字符串正则表达式
我正在开发一个与数据库连接的Java桌面应用程序,我想知道下一个。结果,据我所知,准备好的语句避免了SQL注入,而不直接连接用户数据,但今天我发现它不会转义字符串正则表达式(如like运算符中的“%”),因为它只转义可能会打断字符串本身并改变查询的字符。因此,如果用户这样做:Mysql,处理字符串正则表达式,mysql,regex,security,code-injection,Mysql,Regex,Security,Code Injection,我正在开发一个与数据库连接的Java桌面应用程序,我想知道下一个。结果,据我所知,准备好的语句避免了SQL注入,而不直接连接用户数据,但今天我发现它不会转义字符串正则表达式(如like运算符中的“%”),因为它只转义可能会打断字符串本身并改变查询的字符。因此,如果用户这样做: Search = "%Dogs"; // User input Query = "SELECT * FROM Table WHERE Field LIKE ?"; blah.setString(1, Search); 它
Search = "%Dogs"; // User input
Query = "SELECT * FROM Table WHERE Field LIKE ?";
blah.setString(1, Search);
它将通过注入返回开头包含“Dogs”的所有行
现在我要问:
1-)从全球角度来看,这是一件糟糕/危险的事情吗
2-)Mysql可以从字符串中使用正则表达式的完整列表吗?如果是的话,你能和我分享一下吗
谢谢。如果用户在搜索中使用这些元字符,结果可能是灾难性的,也可能不是灾难性的,但是搜索
%%
可能是不好的。对%Dogs
的有效搜索可能也不会返回用户期望的结果,这会影响他们的体验
只提供两个元字符,因此当从用户处获取时,您可以自己转义它们(只需使用类似于
Search=Search.replaceAll(“%”,“\\\\%”)的东西即可)。这不是正则表达式,就像是。也许您的意思是说,LIKE
的文档中可能有重复的@Bohemian“使用SQL简单正则表达式比较进行模式匹配。”同意,另外一件事,除了LIKE之外,是否还有其他运算符/函数/etc对表达式进行那样的计算?@Neo不是那样的,但是有RLIKE