什么是sql注入?如何有效防止sql注入?

一、什么是sql注入

  利用程序员的代码bug,将输入的参数绕过校验并在系统中当做代码运行,从而攻击系统。

二、如何避免sql注入

1.对sql语句进行预编译

  PreparedStatement类可以对sql语句进行预编译,那么传入的参数只会被当做参数而不会被当做代码去运行。

2.存储过程  

  存储过程是被编译后存储在数据库中的,所以它不会有sql注入的隐患。

3.mybatis框架可避免sql注入

  mybatis进行参数传递的占位符有两种#{}和${},#{}在进行参数传递时会先进行sql编译然后再替换参数,所以不会有sql注入的问题,${}进行参数传递时会先拼接sql然后进行sql编译,会有安全隐患。因此非特殊情况,尽量使用#{}进行参数传递。

4.mybatis中like的安全风险

  select * from test clomn like '%${filed}%'. 该sql语句有注入风险,改为select * from test clomn like concat('%',#{filed},'%')。

5.入参的安全校验

  前后端可对输入的参数进行特殊字符过滤,避免别有用心的参数进入。

原文地址:https://www.cnblogs.com/jxxblogs/p/14799294.html