1.1 SQL注入漏洞简介
SQL注入是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数被带入数据库查询,攻击者可以通过构造不同的SQL语句来时间对数据库的任意操作。
一般情况下,开发人员可以使用动态SQL语句创建通用、灵活的应用。动态SQL语句实在执行过程中构造的,它根据不同的条件产生不同的SQL语句。当开发人员在运行过程中根据不同的查询标准决定提取什么字段(如select),或者根据不同的条件选择不同的查询表的时候,动态地构造SQL语句会非常有用。
以PHP语句为例,命令如下:
$query = "SELECT * FROM USERS WHERE id = $_GET['id']";
由于这里的参数ID可控,且被带入数据库查询,使用非法用法可以任意拼接SQL语句进行攻击。
当然,sql注入按照不同的分类方法可以分为很多种,如报错注入、盲注、Union注入等。
1.2 SQL注入漏洞原理
SQL注入漏洞的产生需要满足以下两个条件。
① 参数用户可控: 前端传给后端的参数内容是用户可以控制的。
② 参数被带入数据库查询: 传入的参数被拼接到SQL语句中,且被带入数据库查询
1.3 MySQL中与SQL注入漏洞相关的知识点
在详细介绍SQL注入漏洞前,先介绍MySQL中与SQL注入漏洞相关的知识点。
在MySQL 5.0版本之后,MySQL默认在数据库中存放一个名为"information_schema"的数据库。在该库中,读者需要记住三个表名,分别是SCHEMATA、TABLES和COLUMNS.
SCHEMATAB表存储该用户创建的所有数据库的库名
TABLES表存储该用户创建的所有数据库的库名和表名
columns表存储该用户创建的所有数据库的库名,表名和字段名