1.SQL注入原理
SQL注入就是攻击者通过把恶意的SQL语句插入到Web表单的输入页面中,且插入的恶意语句会导致原有的SQL语句发生改变,从而达到攻击者的目的去让它执行一些危险的数据操作,进一步欺骗服务器去执行一些非本意的操作。简单来讲,
所有可以涉及到数据库增删改查的系统功能点都有可能存在SQL注入漏洞 。
一个简单的攻击原理举例:
在SQL注入中,我们更应该关注的是业务逻辑,例如业务中可能设计到的增删改查操作,下面通过一个简单的代码小demo来进行SQL注入的演示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SQL注入小demo</title>
</head>
<body>
用户名:
<form method="GET"> //form表单通过get方式接收数据
<input type="text" name="name" size="50" /> //通过name参数接收数据
<br>
<input type="submit" value="点击查询" style="margin-top:50px;">
<?php
$db = mysqli_connect("localhost","root","123456","demo"); //建立mysql连接
if(!$db){
echo "数据库链接失败!";
exit();
}
$name = $_GET['name']; //通过前端设置的name参数将数据接收到后端进行处理
$sql = "select * from user where name = '".$name."';";
echo " 输出当前执行的SQL主句:".$sql."";
$result = mysqli_query($db,$sql); //执行SQL语句
while($row=mysqli_fetch_array($result)) //取出一行数据的所有内容以数组的形式返回
{
echo "账号:".$row['user'].""; //输出一行数据的user字段值
echo "密码:".$row['passwd']."";//输出一行数据的passwd字段值
}
mysqli_close($db);//关闭mysql连接
?>
</form>
</body>
</html>
1.1 PHP MySQLi基本函数
PHP MySQLi 函数允许访问 MySQL 数据库服务器。通俗来说MySQLi 下的函数用来处理PHP中关于数据增删改查的操作。
mysqli_connect()
mysqli_query()
mysqli_fetch_array()
mysqli_close()
为了方便演示实际的业务流程,我们创建demo
数据库,并且创建user
表,在表中插入演示数据。
这里简单演示了一下通过查询来获取数据的操作原理。