黑客可能把一些恶意的SQL语句注入到系统中,从而在数据库里面执行这个恶意的SQL语句。
http://www.xxx.com/goods?goodSkuNo=xxxx
-->
select * from good_skus where good_sku_no = 'xxxx';
// 恶意请求
http://www.xxx.com/goods?goodSkuNo=xxxx' ; drop table good_sku;
-->
select * from good_skus where good_sku_no = 'xxxx' ; drop table good_sku;
这样就直接恶意造成了删库跑路的效果了。
SQL注入问题出现原因
SQL注入的实现也并不容易,除非是黑客知道你的数据表结构。一般获取数据表结构的方式有几种:
- 如果使用的是开源软件,比如开源的博客,论坛系统,那别人自然就知道你的表结构。
- 错误回显。如果系统程序出现异常,直接在浏览器中将SQL异常的信息打印出来,这样黑客就能知道数据表的结构信息。
- 根据请求参数的名称,大致推测你的数据表结构。
解决方案
防止让别人知道系统的数据表结构,关闭web服务器的错误回显。显示一个400,500之类的状态码和统一的错误消息信息就可以了。
SQL参数采用预编译的方式#{}
,不要用占位符拼接代替的方式 ${}
。
insert into xxx_table(xxx, xxx, xxx) value(#{param1}, #{param2}, #{param3});
-->
insert into xxx_table(xxx, xxx, xxx) value(?, ?, ?);