渗透测试入门学习——php与mysql数据库连接、使用session完成简单的用户注册、登录

关于cookie、session和sessionid:

cookie是保存在用户浏览器的令牌,在用户访问网站时,网站可取出用户cookie中存放的内容来识别用户身份,用于会话的sessionid就存放其中

session是用户访问网站时,网站服务器为用户生成的会话对象,存储在网站服务器中,在网站多个页面之间跳转时用来识别用户身份以及前保存用户的各种状态信息,例如登录成功的状态、访问各个页面的权限、某个页面某种功能的权限等等

sessionid 相当于一个会话的身份证,用户访问网站在服务器为用户生成 session的同时会生成一个和它对应 的sessionid ,加密后返回给用户浏览器,保存在浏览器的cookie 中,当用户离开网站,也就是结束会话后再次访问网站时,网站就可取出cookie中存放的sessionid查找到对应session,恢复与用户之间的会话

大致流程:
最终效果:
用户不点击注销主动销毁session便可一直访问登录成功页面:
登陆后可在浏览器控制台用document.cookie查看cookie中保存的sessionid:
校验用户session进行登录(文件名为session.php):
php 复制代码
<?php
    session_start();
    if ($_SESSION["login"] == true) {
        echo "您已经成功登陆<a href='logout.php'>点击注销</a>";
    }
    else {
        $_SESSION["login"] == false;
        die("您无权访问,<a href='login.php'>点击跳转登录页面</a>");
    }
?>
销毁用户session进行登出(文件名为logout.php):
php 复制代码
<?php
    session_destroy();
    header('Location:login.php');
?>
与mysql连接(文件名为connect_mysql.php):
php 复制代码
<?php

    $servername = "localhost";
    $username = "root";
    $password = "root";
    $db_name = "test";
    $table_name = "userinfo";

    // 创建连接
    $con_mysql = mysqli_connect($servername, $username, $password);
    $con_db = mysqli_connect($servername, $username, $password, $db_name);

    // 检测连接数据库是否成功
    if (!$con_mysql) {
        die("连接失败: " . mysqli_connect_error());
    }
    else{
        echo "mysql服务器连接成功</br>";
        if(mysqli_connect($servername, $username, $password, $db_name)){
            echo "数据库$db_name"."已经存在";
        }
        else{
            echo "开始自动创建数据库</br>";
            $mysql_exec = "create database ".$db_name;
            mysqli_query($con_mysql, $mysql_exec);
            echo "数据库创建成功</br>";
            $create_table = "create table if not exists `$table_name`(
                `id` INT UNSIGNED AUTO_INCREMENT,
                `user` VARCHAR(10) NOT NULL,
                `password` VARCHAR(10) NOT NULL,
                PRIMARY KEY ( `id` )
            )ENGINE=InnoDB DEFAULT CHARSET=utf8;";
            $con_db = mysqli_connect($servername, $username, $password, $db_name);
            mysqli_query($con_db, $create_table);
            echo "数据表创建成功</br>";
        }
    }
?>
登录页面(文件名为login.php):
php 复制代码
<?php
    include("connect_mysql.php");
    $username = $_POST['username'];
    $password = $_POST['password'];
    $select = "select user,password from $table_name where user='$username' and password='$password';";
    $reslust = mysqli_query($con_db, $select);


    if(mysqli_num_rows($reslust)){
        session_start();
        $_SESSION['login'] = true;
        $_SESSION['username'] = $username;
        header('Location:welcome.php');
    }
    else{
        session_start();
        $_SESSION['login'] = false;
        if(!(empty($username) && empty($password))){
            $login_msg = "登陆失败";
        }
    }
?>

<html>
<head>
    <meta charset=utf-8>
</head> 
<h1>欢迎访问!请输入账号密码登录</h1> 
<form action="#" method="post" ></br>
    <input type="text" name="username"> </br>
    <input type="password" name="password"> </br>
    <input type="submit"> 
</form>
<a href="signup.php">点击注册</a></br>
<?php echo $login_msg ?>
</html>
登录成功页面(文件名为welcome.php):
php 复制代码
<?php
    include('session.php');
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陆成功页面</title>
</head>
<body>
    <h1>欢迎您的到来!</h1>
    <?php echo "当前登录用户:".$_SESSION['username'] ?>
</body>
</html>
注意:

单纯的拼接sql语句存在sql注入漏洞,在网站无回显的情况下可用盲注手法对网站进行渗透测试

网站的警告信息最好不要输出,避免被猜测出业务逻辑

相关推荐
鬼手点金1 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
软件技术NINI2 小时前
美妆商城html+Css+js 4页
javascript·css·html
蛋蛋的就会顺顺的2 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
程序员Sunday2 小时前
TypeScript 的 any、unknown、never 有什么区别?
前端·面试·typescript
余槐i2 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹2 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo2 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
朱涛的自习室2 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
需要8262 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小小测试开发3 小时前
安全评测得分 0.9556 掉到 0.3257,只改了 top_k 和 prompt_style 之外的题面比例
人工智能·安全·prompt