cntzemir/secure-auth-admin-demo

GitHub: cntzemir/secure-auth-admin-demo

这是一个基于Node.js构建的教学演示项目,展示了如何在Web应用中实施会话认证、RBAC、速率限制及审计日志等关键安全防护措施。

Stars: 0 | Forks: 0

安全认证与管理后台演示

使用 Node.jsExpressEJS 构建的注重安全性的认证演示。
旨在在一个简洁的 Web 应用程序工作流中演示 **基于会话的认证**、**RBAC**、**审计日志**、 **CSRF 防护**、**速率限制** 和 **临时账户锁定**。

Node.js Express Session Auth RBAC CSRF Audit Logs

概述项目亮点功能安全控制截图本地运行文档

## 项目概述 本项目旨在展示一个小型 Web 应用程序可以在设计之初就做出**安全感知的决策**,而不是事后才添加安全措施。 除了关注表单和页面流程,本应用程序强调: - **认证**:包含注册、基于会话的登录和登出 - **授权**:具有后端强制执行的角色分离 - **滥用减少**:通过速率限制和临时锁定规则 - **可追溯性**:通过审计日志和近期活动视图 - **防御性 UX**:提供通用的认证错误和安全的重置响应 - **管理端监控**:检测可疑模式、筛选审计审查以及锁定可见性 它被定位为一个**防御性软件工程演示**,而非生产级 SaaS 产品。 ## 项目的重要性 许多学生认证演示仅停留在基本登录和角色检查。本项目旨在展示一种更具防御性的方法:后端强制授权、滥用减少、审计可见性,以及对安全敏感行为的可预测处理。 目标不仅仅是认证用户,还要使与认证相关的行为可审查、可追溯,并在滥用场景下更加安全。 ## 项目亮点 - 超越了简单的登录/注册 CRUD 流程 - 展示了**安全推理**,而不仅仅是 UI 实现 - 清晰地分离了**认证**和**授权** - 包含对认证事件、可疑模式和锁定账户的**管理端可见性** - 文档详尽,像是一个经过精心设计的项目,而不仅仅是快速编写的代码 ## 架构概览 Browser (浏览器) -> Express routes (路由) -> auth / middleware / validation (认证 / 中间件 / 验证) -> controllers / services (控制器 / 服务) -> session store / JSON data store (会话存储 / JSON 数据存储) -> admin monitoring views / audit log (管理监控视图 / 审计日志) ## 功能集 ### 认证流程 - 用户注册 - 登录 / 登出 - 基于会话的认证 - 模拟忘记密码请求流程 - 通用认证错误处理 ### 用户视图 - 用户仪表板 - 个人资料页 - 近期活动页 ### 管理员视图 - 管理员概览仪表板 - 用户页 - 审计日志页 - 锁定账户页 ### 滥用处理与可见性 - 失败登录跟踪 - 多次失败后的临时账户锁定 - 专用的 `account_locked` 审计事件 - 认证路由上的速率限制 - 包含状态、事件类型、路由、IP 和备注的审计跟踪 - 管理日志视图中的快速筛选 - 管理仪表板上的高优先级和可疑事件审查 ## 安全控制 | 控制手段 | 功能说明 | | --- | --- | | **基于会话的认证** | 将认证状态保留在服务器端,以便于控制和失效 | | **RBAC** | 在后端限制管理员路由,而不仅仅是在 UI 中 | | **密码哈希** | 使用 `bcryptjs` 安全地存储密码 | | **速率限制** | 减少认证路由上的重复登录滥用 | | **临时锁定** | 在多次失败尝试后锁定账户 | | **CSRF 防护** | 保护状态更改表单,包括登出和管理员解锁操作 | | **服务端验证** | 在后端验证认证表单输入 | | **通用认证错误** | 减少凭据枚举信号 | | **审计日志** | 保留认证和管理相关事件的可见性 | ## 考虑到的威胁 本演示将认证、授权、验证和审计可见性作为独立的关注点,以便审查者面对的安全决策易于检查。 - 暴力破解登录尝试 - 凭据猜测和重复认证滥用 - 对仅限管理员路由的未授权访问 - 缺乏反 CSRF 控制的状态更改请求 - 认证表单上的弱验证 - 通过登录响应泄露敏感信息 - 缺乏对可疑行为的可追溯性 ## 截图 ### 公共视图和用户视图 | 登录 | 用户仪表板 | | --- | --- | | ![登录屏幕](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6a3b2bac04052154.png) | ![仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/9307f17a86052155.png) | ### 管理员监控视图 | 管理员概览 | 近期活动 | | --- | --- | | ![管理员概览](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2ee5737088052157.png) | ![近期活动](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e93b1c2823052158.png) | ## | 审计日志 | 可疑事件示例 | | --- | --- | | ![管理员日志](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/53d3f831d3052159.png) | ![筛选后的审计日志](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/f6a499caf1052200.png) | ## 请求 / 响应思维模式 本项目有意将与认证相关的端点视为高价值表面: - 认证路由受到速率限制 - 敏感响应已通用化 - 状态更改表单受 CSRF 保护 - 可疑或与安全相关的操作会被记录 - 管理员页面受后端保护并进行角色检查 ## 技术栈 - **Runtime (运行时):** Node.js - **Framework (框架):** Express - **View engine (视图引擎):** EJS - **Session management (会话管理):** `express-session` - **Password hashing (密码哈希):** `bcryptjs` - **Security headers (安全头):** `helmet` - **Rate limiting (速率限制):** `express-rate-limit` - **Persistence (持久化):** 便携式文件支持的 JSON 存储 ## 架构摘要 ``` src/ ├── config/ # session and data-store setup ├── controllers/ # route handlers ├── middleware/ # auth, role, csrf, validation, rate limit ├── routes/ # public, user, and admin routes ├── services/ # auth, audit, user business logic ├── utils/ # password, request, and time helpers ├── validators/ # auth flow validation ├── views/ # EJS templates for public, user, and admin pages └── public/ # styles and static assets ``` ## 本地运行 ### Windows PowerShell ``` npm install Copy-Item .env.example .env npm run seed npm start ``` ### macOS / Linux ``` npm install cp .env.example .env npm run seed npm start ``` 打开: `http://localhost:3000` ## 初始化后的默认管理员账户 - **Email:** `admin@example.com` - **Password:** `Admin123!` 这是一个仅用于本地测试的**种子本地演示账户**。 ## 建议的演示流程 1. 初始化默认管理员账户 2. 通过 `/register` 注册一个新普通用户 3. 使用该用户登录并查看 `/dashboard`、`/profile` 和 `/activity` 4. 触发重复失败的登录以测试锁定行为 5. 以管理员身份登录并打开: - `/admin` - `/admin/users` - `/admin/logs` - `/admin/locked-accounts` 6. 确认注册、登录、失败、锁定、登出和管理员审查操作都反映在审计跟踪中 ## 文档 - [架构](docs/architecture.md) - [安全决策](docs/security-decisions.md) - [威胁模型](docs/threat-model.md) - [API 路由](docs/api-routes.md) - [测试清单](docs/testing-checklist.md) - [截图清单](docs/screenshots-checklist.md) - [GitHub 发布清单](docs/github-release-checklist.md) ## 已知局限性 - 这是一个教育演示,并非生产环境部署 - 项目目前使用便携式 JSON 存储而非 SQLite/PostgreSQL - 密码重置是模拟流程,不会发送真实邮件 - 当前版本未实现 MFA - 检测逻辑故意保持轻量级且基于规则 - 会话存储适用于本地/演示使用,而非生产规模 ## 下一版本目标 - 将持久化从 JSON 存储迁移到 SQLite 或 PostgreSQL - 增加更强的可疑事件评分和筛选导出 - 引入 MFA 或基于 TOTP 的第二因子支持 - 扩展用于账户恢复和解锁审查的管理员工具 - 添加针对认证、锁定和审计可见性的集成测试 - 改进审查者演示数据和重置工具 ## 分享前的仓库清单 - [ ] `.env` 未提交 - [ ] 运行时数据文件未提交 - [ ] 截图已放置在 `screenshots/` 中 - [ ] README 图片在 GitHub 上正确渲染 - [ ] 注册、登录、登出、锁定和管理员视图已再次测试 - [ ] GitHub 上的 About 部分和主题已填写 docs: 在 README 顶部附近添加审查者摘要
标签:CSRF防护, EJS, Express, GNU通用公共许可证, MITM代理, Node.js, RBAC, Streamlit, StruQ, Web安全, XML 请求, 中间件, 前端安全, 后端开发, 基于会话的认证, 安全开发, 安全演示, 审计日志, 授权管理, 最佳实践, 权限控制, 管理面板, 网络安全, 蓝队分析, 访问控制, 账户锁定, 隐私保护