java.sql.SQLException: sql injection violation, syntax error: syntax error, error in :'soft YaHei UI'"><span style="color:', expect IDENTIFIER, actual IDENTIFIER pos 1935, line 5, column 1136, token IDENTIFIER YaHei
一、背景描述
项目架构:Springboot(2.0.1) + Mybatis(3.4.1) + CKEditor(4.8)
最近在发布文章的时候后台SQL语句突然报错,java.sql.SQLException: sql injection violation, syntax error: syntax error, error in :'soft YaHei UI'"><span style="color:', expect IDENTIFIER, actual IDENTIFIER pos 1935, line 5, column 1136, token IDENTIFIER YaHei,说是SQL注入有问题;一直都在线上稳定运行,怎么突然就报SQL异常了呢?下图是MyBatis打印出来的SQL语句,经过分析得出,Microsoft YaHei UI被识别为分隔符了。最终导致SQL INSERT语句报错。
二、错误原因
根据日志打印出来的报错信息,java.sql.SQLException: sql injection violation, syntax error: syntax error, error in :'soft YaHei UI'"><span style="color:', expect IDENTIFIER, actual IDENTIFIER pos 1935, line 5, column 1136, token IDENTIFIER YaHei,SQL异常,语法错误,分析得出,肯定是SQL语句拼装的不正确导致注入失败。将日志信息复制到数据库中,美化SQL对比得出,我发布文章的时候,有字符被识别为分隔符了,结果就是SQL注入失败。
三、解决方案
根据错误原因,可以得出解决方案有以下几个:
3.1 方案一
在富文本编辑器里把被识别为分隔符的符号或者文字删除,然后重新交给Mybatis解析即可。
3.2 方案二
修改富文本编辑器里的文字字体,只要不被Mybatis识别为分隔符即可。针对本次错误,我采取的方案是,将富文本编辑器里的文字字体由微软雅黑改为宋体。
完结!