码出高效读书笔记:SQL注入

Q1:什么是SQL注入?

A1:SQL注入是注入式攻击中的常见类型,SQL注入式攻击是未将代码与数据进行严格的隔离,导致在读取用户数据的时候,错误地将数据作为代码的一部分执行,从而导致一些安全问题。

典型的SQL注入的例子是当对SQL语句进行字符串拼接操作时,直接使用未加转义的用户输入内容作为变量。例如:

var testCondition;             //测试内容变量
testCondition = Request.from("testCondition")
var sql = "select * from TableA where id = ' " + testCondition + " '";

上例中,如果用户输入的ID只是一个数字的话是没有问题的,可以执行正常的查询语句,但是如果在testCondition中用;将数字ID与其他的SQL语句隔开的话,就会带来意想不到的结果,比如输入drop、delete等。

Q2:怎么预防SQL注入?

A2:根据SQL注入的原理,应从以下几个方面来考虑:

  1. 过滤用户输入参数中的特殊字符,从而降低被SQL注入的风险。
  2. 禁止通过字符串拼接的SQL语句,严格使用参数绑定传入的SQL参数。
  3. 合理使用数据库访问框架提供的防注入机制,比如MyBatis提供的#{ }绑定参数,从而防护SQL注入。同时一定要谨慎的使用${ },${ }相当于使用字符串拼接SQL。

要正确的使用参数化绑定SQL变量!

猜你喜欢

转载自blog.csdn.net/weixin_41047704/article/details/85388991