1) 如何理解sql注入
sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法。输入参数未经过滤直接拼接sql代码执行。
2) sql注入是如何产生的
1.web开发人员无法保证所有输入都已经过滤
2.攻击者利用发送给sql服务器的输入数据构造可执行代码
3.数据库未做相应的安全配置
3) 如何寻找sql注入漏洞
1.识别web应用中所有输入点
2.了解哪些请求会触发异常
3.检测服务器响应中的异常
4) 如何进行sql注入攻击
※.数字注入
正常sql:select * from article where id = 1;
攻击sql:select * from article where id=-1 or 1=1;
※.字符串注入
正常sql:select * from user where username='zhangsan' and password='123456';
攻击sql ①:select * from user where username='zhangsan'# and password='123456';注:#后面的内容会被当做注释
攻击sql ②:select * from user where username='zhangsan'-- ' and password = '123456';注:-- ' 后面的内容会被当做注释
5) 如何预防sql注入
1.严格检查输入变量的类型和格式
2.过滤和转义特殊字符
#方法一:addslashes($username)
#方法二:mysqli_real_escape_string($username, $db)
3.利用mysql的预编译机制
MySQL pdo预处理能防止sql注入的原因:
1、先看预处理的语法
$pdo->prepare('select * from biao1 where id=:id');
$pdo->execute([':id'=>4]);
2、语句一,服务器发送一条sql给mysql服务器,mysql服务器会解析这条sql。
语句二,服务器发送一条sql给mysql服务器,mysql服务器不会解析这条sql,只会把execute的参数当做纯参数赋值给语句一。哪怕参数中有sql命令也不会被执行,从而实现防治sql注入。