sql注入浅析

Sql注入是一个老问题了,虽然现在的主流前后端框架都已经处理了此问题,但是弄明白原理有利于我们更好的分析解决问题;

SQL注入:

看下面简单的登录示例


  
		 
   

服务端代码:

<?php 
$name = $_POST['username'];
$password = $_POST['password'];
$conn = new mysqli('localhost', 'root', 'root@2022');
if($conn->connect_errno){
	echo "mysql连接错误" . $conn->connect_errno;
}
$conn->query('set names "utf8"');
$conn->select_db('fd_test1');

$sql = "select * from fd_admin where username='" .$name. "' and password= '" . $password . "'";
echo $sql;
$rs = $conn->query($sql);

if(!$rs){

	echo 'sql 错误' . $conn->error;
}else{
	if(mysqli_num_rows($rs)){
		$row = $rs->fetch_assoc();
		echo $row['username'] . '登录成功';
	}else{
		echo '用户不存在';
	}
	
}
?>

数据表结构:


表结构


我们输入admin和123456,是可以登录成功的;生成的sql如下:

select * from fd_admin where username='admin' and password= '123456'


如果输入admin' or '1'='1 ,


生成的sql为:

select * from fd_admin where username='admin' or '1'='1' and password= '12345678'

虽然密码不正确,但还是执行成功了,登录成功,这就是简单的sql注入的原理;

当然,这是最简单的情况,我们也是为了演示原理,实际情况肯定不这复杂很多,而且现在后端服务开发,基本都是使用框架,也很少直接拼接sql来执行,框架已经对sql进行了处理,一般不会有sql注入情况,这也是为什么我们推荐使用框架来开发的原因。

但是也有少量特殊情况,需要手动写sql代码,这时就要注意了,下面说下如何避免sql注入:

前端:

前端界面直接给用户使用,永远不要相信用户的输入,所以前端要做好数据验证,前端验证的原则就是,让用户输入的数据类型、格式等尽量符合系统的要求,对不规范的数据进行提示和过滤,前端避免sql注入最基本的方法是过滤,Escape函数:

escape("admin' or '1'='1");

服务器获取到

"admin%27%20or%20%271%27%3D%271"

服务器端获取到需要做处理;

后端:

有些后端开发,认为加了前端验证就不需要后端了,增加代码量还容易出问题,其实

前端验证更多的为了限制普通用户的不规范使用,通过页面能发现的漏洞有限;而且前端验证是可以绕过的,绝大部分攻击者都是通过工具进行的,通过工具直接访问接口、获取数据,这样前端验证就失效了,所以后端面对的是更专业的人士,所以后端的安全防护显得更加重要。

书归正传,后端防护涉及面很广,今天只说下sql注入,mysqli类库执行查询前先绑定

修改后的代码如下:

$sql = "select * from fd_admin where username=? and password= ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $name, $password);
$rs = $stmt->execute();
if(!$rs){
echo 'sql 错误' . $conn->error;
}else{
$result = $stmt->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM)) {
echo '登录成功';
print "
";
}
}


除了代码层面,MySQL使用独立用户,并分配最小权限等,也能有效防治sql问题;

展开阅读全文

页面更新:2024-04-29

标签:框架   原理   错误   结构   情况   代码   简单   工具   数据   用户

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top