错误如下:
Caused by: java.sql.SQLException: sql injection violation, syntax error: ERROR. token : QUESBAR, pos : 173 : SELECT TMP_PAGE., ROWNUM ROW_ID FROM ( SELECT M., A.* FROM T_EW_MERCHANT M LEFT JOIN LP_ADDRESS A ON M.ADDRESS_KEY = A.KEY
WHERE M.MERCHANT_CODE LIKE '%'||?||'%'
OR
M.MERCHANT_NAME LIKE '%'||?||'%'
OR M.MERCHANT_NAME LIKE
'%'||?||'%'
OR M.CERTIFICATE LIKE
'%'||?||'%'
OR M.OWNER
LIKE
'%'||?||'%'
OR A.COUNTRY LIKE
'%'||?||'%'
OR
A.PROVINCE LIKE
'%'||?||'%'
OR A.CITY LIKE
'%'||?||'%'
OR A.COUNTY LIKE
'%'||?||'%'
OR A.STREET_AREA LIKE
'%'||?||'%'
OR A.DETAILE LIKE
'%'||?||'%'
OR A.ZIPCODE
LIKE
'%'||?||'%' ) TMP_PAGE WHERE ROWNUM <= 10
版本:
com.alibaba druid 1.0.31
原提问者GitHub用户roc-cn
根据提供的错误信息,这个问题似乎是由于Druid的Wall过滤器误报了SQL语句中的某些字符导致的。具体来说,Wall过滤器将 QUESBAR
作为一个错误的令牌(token)并报告了一个语法错误。
这种情况下,你可以考虑以下解决方案:
1. 检查SQL语句中的占位符。确保你正确地使用了占位符,并且在执行SQL查询时提供了正确的参数值。
2. 更新Druid版本。尝试更新到最新版本的Druid,以获取修复可能存在的问题的最新补丁。
3. 调整Wall过滤器的配置。如果认为Wall过滤器误报了这个错误,你可以尝试调整Wall过滤器的配置,设置更宽松的规则,或者禁用Wall过滤器。
4. 查阅文档和社区支持。查阅Druid的文档和相关社区支持,寻找类似问题和解决方案的建议。
如果以上方法无法解决问题,建议进一步检查SQL语句和相关代码的逻辑,以排除其他可能的错误或漏洞。
根据你提供的信息,可能是由于阿里巴巴数据库防火墙 (Wall) 过滤器误报了 SQL 语句中的某些字符,导致 SQL 解析错误。
你的 SQL 语句中包含了一个占位符 (QUESBAR),可能是 Wall 过滤器误判了这个字符为 SQL 注入风险导致的。
你可以尝试排除 Wall 过滤器的干扰,看看是否能够解决这个问题。你也可以在 Wall 过滤器的配置中,将其调整为更宽松的模式,以避免类似的误报问题。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。