时间:2021-07-01 10:21:17 帮助过:40人阅读
二、注入产生的原因及修复建议
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 遍历 进制