您现在的位置是:网站首页> php专栏 扩展知识
sql注入原理及注入过程简单介绍
亦然2019-07-15 11:39:38【扩展知识】人已围观
简介sql注入是比较常见的web攻击手段之一,原理是通过把sql命令提交到web表单,以达到欺骗服务器来执行恶意命令。一般用在用户注册、用户登陆、搜索功能等等。
1.sql注入原理
Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,比如用户登陆时输入用户和密码。再在后台 Sql 服务器上解析执行进行的攻击,它是目前黑客对数据库进行攻击的最常用手段之一。
下面我们通过一个小例子来了解一下sql注入:
这是正常的后台登陆,输入正确的用户和密码,进入后台,这时的数据库语句是
select * from admin where username = 'admin' and password = 'af1327b739c2ba00c89559b8f1eafbf9
下面我们尝试一下注入,用户名这里填写' or 1=1-- ,密码随意填写:
这时的数据库语句是
"select * from admin where username = '' or 1=1-- ' and password = '202cb962ac59075b964b07152d234b70'"
也登陆成功,sql注入成功,成功进入后台。
这里测试使用的php语言,版本5.6 表结构 admin表名,字段id,username,password,完整代码如下:
<?php // 连接mysql数据库 $link = mysqli_connect('localhost', 'root', 'root'); if (!$link) { echo "connect mysql error!"; exit(); } // 选中数据库 my_db为数据库的名字 $db_selected = mysqli_select_db($link, 'yun3'); if (!$db_selected) { echo "<br>selected db error!"; exit(); } // 设置mysql字符集 为 utf8 $link->query("set names utf8"); if (!empty($_POST)) { $username = $_POST['username']; //获取用户名 $password = md5($_POST['password']); //获取密码 // 查询数据库中是否存在用户信息 if (!empty($_POST)) { // 查询数据库中是否存在用户信息 $sql = "select * from admin where username = '{$username}' and password = '{$password}'"; $result = mysqli_query($link, $sql); $user = mysqli_fetch_array($result, MYSQL_ASSOC); if ($user) { session_start(); $_SESSION['username'] = $username; echo "登陆成功"; // header("Location: index.php"); } else { echo "<script>alert('账户或者密码错误!重新填写');</script>"; } } } ?>
解释一下'or 1=1 --,这是一个万能语句,--在数据库中的注释符,--后面的内容不会被执行,并且 or 1 = 1的查询永远是正确的,所以sql攻击注入就完成了。需要注意的是有些数据库的注释符是#号,将--替换成#即可。根据真实的sql语句,可以做以下变形:
' or 1=1-- " or 1=1-- or 1=1-- ' or 'a'='a " or "a"="a ') or ('a'='a
很赞哦!()
上一篇:浅析php文件包含漏洞
下一篇:跨站脚本:反射型XSS