您现在的位置是:网站首页> 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
js

下面我们尝试一下注入,用户名这里填写' or 1=1-- ,密码随意填写:

这时的数据库语句是

"select * from admin where username = '' or 1=1-- ' and password = '202cb962ac59075b964b07152d234b70'"
js

也登陆成功,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>";

			}
		}
	}

?>
php

解释一下'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
html

很赞哦!()

亦然

亦然(共32篇文章)

愿你我既可以朝九晚五,也可以浪迹天涯;愿你我既可以拈花把酒,也能围炉诗书茶。