登录界面漏洞总结 您所在的位置:网站首页 网站漏洞有哪些方面 登录界面漏洞总结

登录界面漏洞总结

2023-08-01 00:12| 来源: 网络整理| 查看: 265

前言:前几天,我们被要求玩一个游戏,那就是在规定时间内相互攻打我们之前完成的登录页面,游戏规则很简单,无论你用什么方法只要你能用别人的登录界面登录成功就算赢。刚开局由于我没有改数据库的默认密码,被人直接用默认密码进了我的数据库,然后就悲剧了。。。

1、sql注入原理

我们先来一段代码

$name=$_POST['name']; $password=$_POST['password']; $sql="select * from t1 where name='$name' and password='$password'"; $query=mysql_query($sql); $arr=mysql_fetch_array($query); if(is_array($arr)) { header("Location:manager.php"); } else { echo "alert(您的用户名或密码输入有误);"; }

其中的注入点就是这一段代码

$sql="select * from t1 where name='$name' and password='$password'";

如果我post过去的name=’ or 1 # 的话就有可能直接登录成功,下面让我们来分析一下。 当我们输入的name=’ or 1 # 时,则上面的代码就变成了

$sql=select * from t1 where name=' 'or 1 # ' && password='$password';

由于后面的内容又被我们输入的 # 给注释了,所以整个代码就变成了

$sql=select * from t1 where name=' 'or 1

因为前面的 ’ 被我们输入的 ’ 给闭合了,而 or 1 本身就为真,则整个语句就为真,所以整个代码就等价于

$sql=selsect * from t1

等于where后面的语句直接就没用了,按照上面这段代码就可以直接登录成功了。(那天就有人直接就用万能钥匙( 'or 1 #)登进别人的登录界面了)

2、代码漏洞

但我并不觉得这段

$sql=selsect * from t1

的代码是漏洞的全部,产生漏洞的最主要原因是那个判断登录的语句

if(is_array($arr))

如果我把这段代码改成

if($arr['name']===$name && $arr['password']===$password)

的话,则 'or 1 # 就通不过了。

3、解决方案 $sql="select * from t1 where name='$name' and password='$password'";

其实这段代码还有一些漏洞,因为这行代码会把用户输入的信息拿进数据库去比较,这样就会让一些hacker有机会往数据库里注入一些恶意代码,之后就有可能盗取里面的信息。 相比较而言下面这段代码就比较安全

$query="select * from t2 "; $result=mysqli_query($link,$query); $a=0; while($colum=mysqli_fetch_array($result)) { if($colum['name']===$_POST['name'] && $colum['password']===$_POST['password']) { $a++; break; } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有