小迪安全23-php后台模块

news/2025/2/24 10:42:49

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

php"><!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"><?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"><?php
setcookie("username", " ", time() - 3600);
setcookie("password", " ", time() - 3600);
header("location:admin-c.php");
exit;

amdin-s

php"><!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"><?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"><?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.niftyadmin.cn/n/5864231.html

相关文章

sklearn机器学习 Python代码通用模板

以下是一个使用 scikit-learn&#xff08;sklearn&#xff09;进行机器学习的通用 Python 代码模板。这个模板涵盖了数据加载、预处理、模型训练、评估和预测的基本流程&#xff0c;适用于常见的机器学习任务。 python # 导入必要的库 import numpy as np import pandas as …

Ubuntu编译jetlinks-ui-vue

安装node 需要18.14.0以上 LINUX安装node/nodejs-CSDN博客 启动jetlinks-community Ubuntu安装geteck/jetlinks实战:源码启动-CSDN博客 下载 git clone https://gitee.com/jetlinks/jetlinks-ui-vue 准备 yarn 编译 # npm run build yarn build启动 yarn dev 测试

WebXR教学 01 基础介绍

什么是WebXR&#xff1f; 定义 XR VR AR Web上使用XR技术的API WebXR 是一组用于在 Web 浏览器中实现虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;应用的技术标准。它由 W3C 的 Immersive Web 工作组开发&#xff0c;旨在提供跨设备的沉浸式体验…

【算法系列】荷兰国旗问题:三指针法原地排序

一、题目(leetcode75 颜色分类 --三分数组) 二、思路 算法核心&#xff1a;三指针分治策略 该问题被称为“荷兰国旗问题”&#xff08;Dutch National Flag Problem&#xff09;&#xff0c;由计算机科学家Edsger Dijkstra提出。其核心思想是通过三个指针将数组划分为三个区…

Android 技术栈

这里有必要学一下。 Android 串口通信-CSDN博客

LangChain大模型应用开发:构建Agent智能体

介绍 大家好&#xff0c;博主又来给大家分享知识了。今天要给大家分享的内容是使用LangChain进行大模型应用开发中的构建Agent智能体。 在LangChain中&#xff0c;Agent智能体是一种能够根据输入的任务或问题&#xff0c;动态地决定使用哪些工具(如搜索引擎、数据库查询等)来…

深度学习(3)-TensorFlow入门(梯度带)

TensorFlow看起来很像NumPy。但是NumPy无法做到的是&#xff0c;检索任意可微表达式相对于其输入的梯度。你只需要创建一个GradientTape作用域&#xff0c;对一个或多个输入张量做一些计算&#xff0c;然后就可以检索计算结果相对于输入的梯度&#xff0c;如代码清单3-10所示。…

【新手初学】SQL注入之二次注入、中转注入、伪静态注入

二次注入 一、概念 二次注入可以理解为&#xff0c;攻击者构造的恶意数据存储在数据库后&#xff0c;恶意数据被读取并进入到SQL查询语句所导致的注入。 二、原理 防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理&#xff0c;但在恶意数据插入到数据库时被处…