黑客可能把一些恶意的SQL语句注入到系统中,从而在数据库里面执行这个恶意的SQL语句。

  1. http://www.xxx.com/goods?goodSkuNo=xxxx
  2. -->
  3. select * from good_skus where good_sku_no = 'xxxx';
  4. // 恶意请求
  5. http://www.xxx.com/goods?goodSkuNo=xxxx' ; drop table good_sku;
  6. -->
  7. select * from good_skus where good_sku_no = 'xxxx' ; drop table good_sku;
  8. 这样就直接恶意造成了删库跑路的效果了。

SQL注入问题出现原因

SQL注入的实现也并不容易,除非是黑客知道你的数据表结构。一般获取数据表结构的方式有几种:

  • 如果使用的是开源软件,比如开源的博客,论坛系统,那别人自然就知道你的表结构。
  • 错误回显。如果系统程序出现异常,直接在浏览器中将SQL异常的信息打印出来,这样黑客就能知道数据表的结构信息。
  • 根据请求参数的名称,大致推测你的数据表结构。

解决方案

防止让别人知道系统的数据表结构,关闭web服务器的错误回显。显示一个400,500之类的状态码和统一的错误消息信息就可以了。
SQL参数采用预编译的方式#{} ,不要用占位符拼接代替的方式 ${}

  1. insert into xxx_table(xxx, xxx, xxx) value(#{param1}, #{param2}, #{param3});
  2. -->
  3. insert into xxx_table(xxx, xxx, xxx) value(?, ?, ?);