mrkatzzz/sse-webapp

GitHub: mrkatzzz/sse-webapp

一个用于网络安全实验课程的 PHP 最小化身份验证系统,通过模拟撞库攻击场景演示 Bcrypt 哈希、速率限制、账户锁定和 TOTP 双因素认证等多层防御策略。

Stars: 0 | Forks: 0

# 安全身份验证系统 (Bcrypt + TOTP 2FA) 本仓库包含一个基于 PHP 的最小化身份验证系统,是网络安全实验课程的一部分。它演示了多层防御策略,包括安全哈希、自动速率限制和双因素身份验证 (2FA)。 ## 🛠 环境搭建 (XAMPP) 本项目设计为在本地 **XAMPP** 服务器上运行。请按照以下步骤部署文件: 1. **本地目录**:在 XAMPP 的 `htdocs` 目录下创建一个名为 `cyber_lab` 的文件夹: - **Linux**:`/opt/lampp/htdocs/cyber_lab/` - **Windows**:`C:\xampp\htdocs\cyber_lab\` 2. **文件部署**:将本仓库中的所有 `.php` 文件粘贴到 `cyber_lab` 文件夹中。 3. **服务**:确保通过 XAMPP 控制面板启动了 **Apache** 和 **MySQL** 服务。 4. **访问**:在浏览器中访问 `http://localhost/cyber_lab/register.php` 开始使用。 ## 🗄 数据库初始化 在 **phpMyAdmin** (`http://localhost/phpmyadmin`) 中执行以下 SQL 命令以配置后端数据库: ``` -- 1. Initialize Database CREATE DATABASE lab_assignment; USE lab_assignment; -- 2. Create Users Table with Security Columns CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, login_attempts INT DEFAULT 0, lockout_until DATETIME DEFAULT NULL, google_2fa_secret VARCHAR(32) DEFAULT NULL ); -- 3. Alter Table for 2FA Support ALTER TABLE users ADD COLUMN google_2fa_secret VARCHAR(32) DEFAULT NULL; ``` # 🔐 带有 2FA 的身份验证系统 ## 📂 文件结构 | 文件 | 描述 | | --------------------- | ------------------------------------------------------------------------------------------------------- | | **db.php** | 建立应用程序全局使用的 MySQLi 连接逻辑。 | | **authenticator.php** | 核心库,使用共享的 Base32 密钥和当前的 30 秒时间步长计算 TOTP 验证码。 | | **register.php** | 处理用户创建;使用 `PASSWORD_BCRYPT` 对密码进行哈希处理。 | | **setup_2fa.php** | 生成唯一的 2FA 密钥,并渲染二维码用于与 Google Authenticator 同步。 | | **login.php** | 阶段 1 安全机制:验证凭据并管理速率限制逻辑。 | | **verify_2fa.php** | 阶段 2 安全机制:在授予最终会话访问权限之前,要求输入 6 位 TOTP 验证码。 | | **welcome.php** | 受限仪表盘,只有在成功完成两个安全阶段后才能访问。 | | **logout.php** | 销毁用户会话并执行安全清理。 | ## 🛡 安全机制 ### **1. 密码哈希** 系统绝不存储明文密码。本系统使用 PHP 的 `password_hash()` 函数结合 **Bcrypt** 算法。 验证过程使用 `password_verify()` 进行,该函数可有效抵御彩虹表攻击。 ### **2. 速率限制与账户锁定** 为了缓解**暴力破解**和**撞库**攻击,系统会记录失败的尝试次数。 * 当达到 **3 次失败尝试**后,该账户将被标记。 * 系统会生成一个 `lockout_until` 时间戳,在 **5 分钟** 的时间段内拒绝所有访问尝试。 ### **3. TOTP 2FA (双因素身份验证)** 通过实现**基于时间的一次性密码 (TOTP)**,确保仅凭泄露的密码不足以获取账户访问权限。 * **共享密钥**:服务器和用户的移动设备之间共享一个唯一的 Base32 密钥。 * **时间同步**:验证码基于当前的 Unix 时间生成。 ### **4. 防重放保护** 每个 TOTP 验证码仅在 **30 秒的时间窗口**内有效。 这可以防止**重放攻击**,即被拦截的验证码被未经授权的方重新使用。
标签:2FA, Bcrypt, ffuf, OPA, OpenVAS, PHP, SQL, TOTP, Web安全, XAMPP, 凭证填充攻击, 双因素认证, 安全实验, 安全设计与实现, 密码哈希, 登录安全, 系统审计, 网络安全, 蓝队分析, 账户锁定机制, 身份验证系统, 隐私保护, 靶场