渗透学习15- PHP 开发-个人博客项目&登录验证&Cookie&Session&验证码安全

登录流程

1、发送登录请求 账户密码
2、接收账号密码
3、判断账号密码的准确性

正确 - 成功登录 -跳转到成功页面
错误 - 登录失败- 重新登录

后台管理系统有多个文件页面,比如文章管理,用户添加等等各种页面,每个页面都需要登陆验证 (如果不验证的话,岂不是直接就能查看编辑各个页面了 )。为了方便验证,没有采取再次要求登录的方式, 一般采取cookie或者session进行验证,后台系统会包含一个验证文件,后台的每个页面都需要加载这个验证文件,要是验证不通过,则不允许加载这些页面
看下面的例子

<form action="" method="POST">
    帐号:<input type="text" name="user">
    密码:<input type="password" name="pass">
    <input type="submit" value="提交">
</form>
<?php
header("Content-Type:text/html;charset=utf-8");
include('config.php');
$username=$_POST['user'];
$password=md5($_POST['pass']);
$sql="select * from sy_adminuser where username='$username'and password='$password'";
echo $sql;
$result=mysqli_query($conn,$sql);
if(mysqli_num_rows($result)){
    echo "成功登录";
    header("location: admin/add_news.php");
}else{
    echo "failed";
    header("location: login.php");
}

登录成功,则跳转到admin/add_news.php这个页面。实践中会发现它确实会跳转到这个页面,但它直接执行了。我们所预期的是,只有在登录之后才能看到执行这个添加文章的页面的。但现在就相当于可以直接访问执行了。那登不登陆还有什么意义呢?(可能造成未授权访问) 所以这里需要加上登录验证代码,但是我们又不想每次老是登录它,于是可以用cookie验证文件
在这里插入图片描述
cookie - 身份验证 存储在客户端浏览器内
cookie安全 : cookie修改 cookie伪造 cookie盗取
session - 身份验证 存储在服务端服务器内
session安全: session劫持(会话劫持)

cookie修改

login.php中添加如下设置cookie代码,

if(mysqli_num_rows($result)){
    echo "成功登录";
    header("location: admin/add_news.php");
    //设置cookie值
    setcookie(user,$username);
}else{
    echo "failed";
    header("location: login.php");
}

add_news.php中添加验证cookie的代码

<?php
header("Content-Type:text/html;charset=utf-8");
//先要验证登录 才能进行代码操作
//1、 cookie 验证
$user=$_COOKIE['user'];
if($user != ''){
    echo '就是这个页面了';
}else{
    echo '登录失败,不能给你看这个页面';
}
?>

假如这个cookie值是可修改的,而且也没有进行其他验证,就可能出现了cookie修改漏洞。仅仅修改cookie值就有可能绕过验证。
在这里插入图片描述

session验证

修改login.php

<form action="" method="POST">
    帐号:<input type="text" name="user">
    密码:<input type="password" name="pass">
    <input type="submit" value="提交">
</form>
<?php
header("Content-Type:text/html;charset=utf-8");
include('config.php');
$username=$_POST['user'];
$password=md5($_POST['pass']);
$sql="select * from sy_adminuser where username='$username'and password='$password'";
echo $sql;
$result=mysqli_query($conn,$sql);
//if(mysqli_num_rows($result)){
    //    echo "成功登录";
    //    header("location: admin/add_news.php");
    //    setcookie('user',$username);
    //}else{
    //    echo "failed";
    //    //header("location: login.php");
//}
while($row=mysqli_fetch_array($result)){//成功登录后
    session_start();
    $_SESSION['user']=$row['username']; //将查询结果赋值给 $_SESSION['user']
    header("location: admin/add_news.php");
}

修改add_news.php

<?php
header("Content-Type:text/html;charset=utf-8");
//先要验证登录 才能进行代码操作
//1、 cookie 验证
//$user=$_COOKIE['user'];
//if($user != ''){
//  echo '就是这个页面了';
//}else{
//    echo '登录失败,不能给你看这个页面';
//}
session_start();
if($_SESSION['user']=='admin'){ // 将$_SESSION['user']的值与admin进行比较
    echo 'you are admin';
}else{
    echo 'you are not admin';
}
?>

再次进行登录查看cookie,与之前的单纯的cookie验证相比,多了phpsessid。这个sessid值几乎无法伪造。每次打开浏览器都不一样,且有很短的时效性,session是更加安全的验证方式。有session在,cookie类的攻击方式基本可以放弃了。
在这里插入图片描述

爆破攻击 - 验证码

如果爆破时,验证码可以一直抓包复用,那就等于没有验证码。如果每次都是动态验证码,不能复用,则考虑验证码识别插件,如果时动作型的验证码,比如 拖、拉、拽 等等,那就有点难了啊

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值