登录界面漏洞总结 | 您所在的位置:网站首页 › 网站漏洞有哪些方面 › 登录界面漏洞总结 |
前言:前几天,我们被要求玩一个游戏,那就是在规定时间内相互攻打我们之前完成的登录页面,游戏规则很简单,无论你用什么方法只要你能用别人的登录界面登录成功就算赢。刚开局由于我没有改数据库的默认密码,被人直接用默认密码进了我的数据库,然后就悲剧了。。。 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 实验室设备网 版权所有 |