含义:
通过输入特殊的参数拼接SQL语句,进而破坏原有的SQL语句的含义,然后非法获取数据库数据或者进行非法数据库操作,是一种常见的web安全漏洞。
通常在jdbc中sql注入攻击是发生在使用字符串拼接来书写sql中参数的情况
如图所示:
但是我们使用?占位符来书写拼接sql就可以解决这个问题,因为使用?占位符之后会先将sql语句发送到数据库进行预编译,这样做保证了sql原有语法结构的正常执行,不会让特殊字符影响sql语句原有结构执行
两种方式的区别
字符串拼接 | ?站位 | |
---|---|---|
相同 | 动态拼接sql中的数据参数 | 动态拼接SQL中的数据参数 |
不同 | 可以绑定非数据的参数:表名、字段名、SQL关键字 | 只能绑定数据,不能绑定其他SQL关键词和表名字段名 |
有SQL注入风险 | 可以防止SQL注入。 | |
建议场景 | 适用于拼接表名、字段名、SQL关键词 | 适用于拼接数据参数 |