当前位置: 首页 > article >正文

小迪安全23-php后台模块

cookie技术

cookie就是身份验证表示,通过cookie好区分每个用户的个人数据和权限,第一次登陆之后正常的网站都会赋予一个cookie

写写一个后台界面,直接让ai去写就可以

然后自己需要的提交方式,和表单值自己修改即可

生成cookie的流程

然后再创建一个专门存储账号密码的表

如何写一个登录验证代码

这里可以看到是登录成功挑战到index-c,但是我们也可以直接访问,这就造成了为未授权访问漏洞;

通过这段代码生成个cookie

现在直接访问就不懈怠任何cookie信息

这样就可以通过携带的cookie信息判断是否是管理员

然后等出按钮就是将cookie为空、

这里就涉及到了盗取管理员cookie访问管理员界面的问题,如果知道管理员的cookie可以直接访问后台

直接手写cookie访问

这种就不是很安全

session技术

优势 

在创建刚刚的三个文件,换成-s

生成的s文件就存储到服务端

登录逻辑跟之前的一样

但这就是通过判断存储的s形的内容来判断,而在cookie上只能看到他使用了是形的一段字符串

判读是cookie还是s行,看网站大小

把浏览器关闭之后是否还能登录,不能就是s形

 token技术

token具有数据唯一性

每生成一个数据包都会有唯一的token值,如果token值不对,发送过去的数据包,服务端就不会处理,而是直接丢弃

这最直观的就是防止暴力破解,爆破了解的数据包重发,能改账户密码,但是预知不了下一个数据包的token值,服务端直接丢弃

token值的创建和前端传输时隐藏

hidde隐藏属性

在写一个管理员界面的校验

老师写的这个token验证还是有点问题,数据包可以重放,没有判断好token

代码

admin-c

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>后台登录</title>
</head>
<body>
<div style="text-align: center; margin-top: 100px;">
    <h2>后台登录</h2>
    <form action=" " method="post" style="display: inline-block; text-align: left;">
        <div style="margin-bottom: 15px;">
            <label for="username" style="display: block; margin-bottom: 5px;">用户名:</label>
            <input type="text" id="username" name="username" required style="width: 200px; padding: 5px;">
        </div>
        <div style="margin-bottom: 15px;">
            <label for="password" style="display: block; margin-bottom: 5px;">密码:</label>
            <input type="password" id="password" name="password" required style="width: 200px; padding: 5px;">
        </div>
        <div style="text-align: center;">
            <button type="submit" style="padding: 10px 20px; background-color: #4CAF50; color: white; border: none; cursor: pointer;">登录</button>
        </div>
    </form>
    <div style="margin-top: 15px;">
        <a href="#" style="color: #4CAF50; text-decoration: none;">忘记密码?</a>
    </div>
</div>
</body>
</html>

<?php
include '../config.php';

$user=@$_POST['username'];
$pass=@$_POST['password'];
$sql="select * from admin where username='$user' and password='$pass';";
$data=mysqli_query($con,$sql);
if($_SERVER['REQUEST_METHOD']=='POST'){//$_SERVER['REQUEST_METHOD']该变量中存储的是表单提交的方式。所以获取表单值
    if(mysqli_num_rows($data) > 0){//mysqli_num_rows返回的行数
        $expire= time()+60*60*24*30;//30天,第一个60是秒
        setcookie("username",$user,$expire);
        setcookie("password",$pass,$expire);
        //echo "<script>alert('登录成功')</script>";
        header("Location: index-c.php");
    }else{
        echo "<script>alert('登录失败')</script>";
    }
}

index-c

<?php
if($_COOKIE['username']=='admin' and $_COOKIE['password']=='123456'){

}else{
    header('location:admin-c.php');
}

?>
<!DOCTYPE html>
<p>欢迎您 <?php echo $_COOKIE['username']; ?>!</p>
<br>
<br>
<html lang="zh-CN">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>退出登录</title>
<div class="logout-container">
    <h2>退出登录</h2>
    <p>您确定要退出登录吗?退出后需要重新登录才能访问您的账户。</p>
    <form action="logout-c.php" method="post">
        <button type="submit" class="logout-button">退出登录</button>
    </form>
</div>
</body>
</html>

logout-c

<?php
setcookie("username", " ", time() - 3600);
setcookie("password", " ", time() - 3600);
header("location:admin-c.php");
exit;

amdin-s

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>后台登录</title>
</head>
<body>
<div style="text-align: center; margin-top: 100px;">
    <h2>后台登录</h2>
    <form action=" " method="post" style="display: inline-block; text-align: left;">
        <div style="margin-bottom: 15px;">
            <label for="username" style="display: block; margin-bottom: 5px;">用户名:</label>
            <input type="text" id="username" name="username" required style="width: 200px; padding: 5px;">
        </div>
        <div style="margin-bottom: 15px;">
            <label for="password" style="display: block; margin-bottom: 5px;">密码:</label>
            <input type="password" id="password" name="password" required style="width: 200px; padding: 5px;">
        </div>
        <div style="text-align: center;">
            <button type="submit" style="padding: 10px 20px; background-color: #4CAF50; color: white; border: none; cursor: pointer;">登录</button>
        </div>
    </form>
    <div style="margin-top: 15px;">
        <a href="#" style="color: #4CAF50; text-decoration: none;">忘记密码?</a>
    </div>
</div>
</body>
</html>

<?php
include '../config.php';

$user=@$_POST['username'];
$pass=@$_POST['password'];
$sql="select * from admin where username='$user' and password='$pass';";
$data=mysqli_query($con,$sql);
if($_SERVER['REQUEST_METHOD']=='POST'){//$_SERVER['REQUEST_METHOD']该变量中存储的是表单提交的方式。所以获取表单值
    if(mysqli_num_rows($data) > 0){
    session_start();
    $_SESSION['username']=$user;
    $_SESSION['password']=$pass;
    header('location:index-s.php');
    exit();
    }else{
        echo "<script>alert('登录失败')</script>";
    }
}

index-s

<?php
session_start();
if ($_SESSION['username']!='admin' && $_SESSION['username']!='123456'){
    header('location:admin-s.php');
}


?>
<!DOCTYPE html>
<p>欢迎您 <?php echo $_COOKIE['username']; ?>!</p>
<br>
<br>
<html lang="zh-CN">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>退出登录</title>
<div class="logout-container">
    <h2>退出登录</h2>
    <p>您确定要退出登录吗?退出后需要重新登录才能访问您的账户。</p>
    <form action="logout-c.php" method="post">
        <button type="submit" class="logout-button">退出登录</button>
    </form>
</div>
</body>
</html>

token

<?php
session_start();
$token = bin2hex(random_bytes(16));
//生成token,随机十六位字符串
$_SESSION['token'] = $token;
//将token保存到session之中
setcookie("token", $token, time() + 3600);
//将token绑定到cookie中
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>后台登录</title>
</head>
<body>
<div style="text-align: center; margin-top: 100px;">
    <h2>后台登录</h2>
    <form action="token-check.php" method="post" style="display: inline-block; text-align: left;">
        <input type="hidden" name="token" value="<?php echo $token; ?>">
        <div style="margin-bottom: 15px;">
            <label for="username" style="display: block; margin-bottom: 5px;">用户名:</label>
            <input type="text" id="username" name="username" required style="width: 200px; padding: 5px;">

        </div>
        <div style="margin-bottom: 15px;">
            <label for="password" style="display: block; margin-bottom: 5px;">密码:</label>
            <input type="password" id="password" name="password" required style="width: 200px; padding: 5px;">
        </div>
        <div style="text-align: center;">
            <button type="submit" style="padding: 10px 20px; background-color: #4CAF50; color: white; border: none; cursor: pointer;">登录</button>
        </div>
    </form>
    <div style="margin-top: 15px;">
        <a href="#" style="color: #4CAF50; text-decoration: none;">忘记密码?</a>
    </div>
</div>
</body>
</html>

jian

kang

ping

an


http://www.kler.cn/a/560954.html

相关文章:

  • 【DBeaver】Oracle数据库连接报错:驱动程序 ‘Oracle‘ 的配置错误的解决办法
  • C++(STL)--queue(队列)priority_queue(优先队列)dequeue(双端队列)
  • 深入理解IP子网掩码子网划分{作用} 以及 不同网段之间的ping的原理 以及子网掩码的区域划分
  • uniapp 微信小程序打包之后vendor.js 主包体积太大,解决办法,“subPackages“:true设置不生效
  • 【含文档+PPT+源码】基于微信小程序的健康饮食食谱推荐平台的设计与实现
  • 【YOLOv11改进- 主干网络】YOLOv11+Ghostnetv2: 华为轻量级目标检测模型Ghostnetv2特征提取网络助力YOLOv11有效涨点;
  • 网络运维学习笔记 017 HCIA-Datacom综合实验01
  • FreeRTOS 时间管理
  • 数据库面试题(基础常考!!!)
  • 深入理解 CSS pointer-events: none:穿透点击的魔法
  • Centos中将UTC的时区改为CTS时区
  • 【数据库】【MySQL】索引
  • STM32CUBEIDE FreeRTOS操作教程(十三):task api 任务访问函数
  • 目标检测之FAST RCNN论文简读
  • AIGC技术助力空军招飞,近屿智能开启智能人才培育新征程
  • SSTI知识点汇总
  • docker离线安装记录
  • Vulnhun靶机-kioptix level 4-sql注入万能密码拿到权限ssh连接利用mysql-udf漏洞提权
  • 05C语言——数组
  • 95.【C语言】解析预处理(3)