当前位置:Gxlcms > 数据库问题 > WEB安全 php+mysql5注入防御

WEB安全 php+mysql5注入防御

时间:2021-07-01 10:21:17 帮助过:40人阅读

,0x20,VERSION(),0x20,USER(),0x20,@@VERSION_COMPILE_OS),2,3 用户ID:sqlin 5.5.53 root@localhost Win32 http://127.0.0.1/1.php?x=1 UNION SELECT CONCAT(TABLE_NAME,0x20,TABLE_COLLATION),2,3 from information_schema.tables where table_schema=0x73716C696E http://127.0.0.1/1.php?x=1 UNION SELECT CONCAT(column_name),2,3 from information_schema.columns where table_name=0x6E657773 // http://127.0.0.1/1.php?x=1 UNION SELECT id,text,title FROM sqlin.news http://127.0.0.1/1.php?x=1 UNION SELECT `key`,2,3 FROM sqlin.data key在数据库中是关键字,需要用反引号引起来 用户ID:www.xiaodi8.com

  

二、注入产生的原因及修复建议

1. 注入产生的原因:未对参数接收的值进行过滤


2. 修复建议:
2.1 判断传入的参数类型(数字,过滤非数字):

<?php
//定义接收参数
//1.定义数据库信息
//2.连接数据库,选择数据库,定义sql语句,执行语句
//3.返回结果并处理显示,关闭数据库


$id = $_GET[‘x‘];//接收参数名为x的值并赋值给变量id
if(is_numeric($id)){ //如果接收过来的id变量的值是数字
	$conn = mysql_connect("127.0.0.1","root","root");//连接数据库
	mysql_select_db("sqlin",$conn);//选择数据库
	$sql = "select * from news where id=$id";//定义sql语句
	$result = mysql_query($sql);//执行sql语句
	while($row = mysql_fetch_array($result)){//获取,遍历查询结果并显示
		echo "用户ID:".$row[‘id‘]."<br>";
		echo "文章标题:".$row[‘title‘]."<br>";
		echo "文章内容:".$row[‘text‘]."<br>";
		echo "<hr>";
		
	}
		mysql_close($conn);//关闭数据库连接
		echo "当前执行语句:".$sql."<hr>";
}else{
	echo "非法字符: ".$id;
}




?>

  

2.2 指定关键字过滤(过滤select等关键字,考虑大小写是否可绕过):

<?
//php语言开端
//php+mysql注入页面编程实现
/*
1.接受参数
2.数据库连接,选择,定义组合,执行
3.返回结果并处理显示
*/


function check_sql($id){ //过滤select关键字
	$id = str_replace("select","",$id);
	return $id;
}

$id = $_GET[‘x‘];//接受参数名x的值并赋值给变量id
//$id = str_replace("select","",$id);
$id = check_sql($id);
//echo $id;
$conn = mysql_connect("127.0.0.1","root","root");//连接数据库
mysql_select_db("sqlin",$conn);//选择数据库
$sql = "select * from news where id=$id";//定义sql语句
$result = mysql_query($sql);//执行sql语句
while($row = mysql_fetch_array($result)){ //遍历结果显示
	echo "用户ID:".$row[‘id‘]."<br >";
	echo "文章内容:".$row[‘text‘]."<br >";	
	echo "文章标题:".$row[‘title‘]."<br >";
	echo "<hr>";

}
	mysql_close($conn);//关闭数据库连接
	echo "当前执行语句:".$sql."<hr>";




//php语言结尾
?>

  

end.

 

WEB安全 php+mysql5注入防御

标签:默认   replace   general   mysql注入   版本   echo   check   遍历   进制   

人气教程排行