feat: 安全增强 + 删除密码重置申请功能 + 登录提醒开关

安全增强:
- 新增 SSRF、XXE、模板注入、敏感路径探测检测规则
- security/constants.py: 添加新的威胁类型和检测模式
- security/threat_detector.py: 实现新检测逻辑

删除密码重置申请功能:
- 移除 /api/password_resets 相关API
- 删除 password_reset_requests 数据库表
- 前端移除密码重置申请页面和菜单
- 用户只能通过邮��找回密码,未绑定邮箱需联系管理员

登录提醒全局开关:
- email_service.py: 添加 login_alert_enabled 字段
- routes/api_auth.py: 检查开关状态再发送登录提醒
- EmailPage.vue: 添加新设备登录提醒开关

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-27 12:08:36 +08:00
parent 4ba933b001
commit 89f3fd9759
65 changed files with 555 additions and 784 deletions

View File

@@ -1,24 +1,20 @@
{
"_accounts-BXD0We06.js": {
"file": "assets/accounts-BXD0We06.js",
"_accounts-CTfB-Ncr.js": {
"file": "assets/accounts-CTfB-Ncr.js",
"name": "accounts",
"imports": [
"index.html"
]
},
"_auth-cf7b3Gq2.js": {
"file": "assets/auth-cf7b3Gq2.js",
"_auth-WsWSY0rn.js": {
"file": "assets/auth-WsWSY0rn.js",
"name": "auth",
"imports": [
"index.html"
]
},
"_password-7ryi82gE.js": {
"file": "assets/password-7ryi82gE.js",
"name": "password"
},
"index.html": {
"file": "assets/index-DhsLPY8p.js",
"file": "assets/index-CEOd73lG.js",
"name": "index",
"src": "index.html",
"isEntry": true,
@@ -36,12 +32,12 @@
]
},
"src/pages/AccountsPage.vue": {
"file": "assets/AccountsPage-38dq1Ex4.js",
"file": "assets/AccountsPage-D3IUho1c.js",
"name": "AccountsPage",
"src": "src/pages/AccountsPage.vue",
"isDynamicEntry": true,
"imports": [
"_accounts-BXD0We06.js",
"_accounts-CTfB-Ncr.js",
"index.html"
],
"css": [
@@ -49,53 +45,51 @@
]
},
"src/pages/LoginPage.vue": {
"file": "assets/LoginPage-B_fgHOTT.js",
"file": "assets/LoginPage-x4LlIM56.js",
"name": "LoginPage",
"src": "src/pages/LoginPage.vue",
"isDynamicEntry": true,
"imports": [
"index.html",
"_auth-cf7b3Gq2.js",
"_password-7ryi82gE.js"
"_auth-WsWSY0rn.js"
],
"css": [
"assets/LoginPage-8DI6Rf67.css"
"assets/LoginPage-C_sxX_84.css"
]
},
"src/pages/RegisterPage.vue": {
"file": "assets/RegisterPage-B_Z92PVI.js",
"file": "assets/RegisterPage-BBedBh-y.js",
"name": "RegisterPage",
"src": "src/pages/RegisterPage.vue",
"isDynamicEntry": true,
"imports": [
"index.html",
"_auth-cf7b3Gq2.js"
"_auth-WsWSY0rn.js"
],
"css": [
"assets/RegisterPage-yylt2w7b.css"
]
},
"src/pages/ResetPasswordPage.vue": {
"file": "assets/ResetPasswordPage-2f8v-5j9.js",
"file": "assets/ResetPasswordPage--Vqm02p7.js",
"name": "ResetPasswordPage",
"src": "src/pages/ResetPasswordPage.vue",
"isDynamicEntry": true,
"imports": [
"index.html",
"_auth-cf7b3Gq2.js",
"_password-7ryi82gE.js"
"_auth-WsWSY0rn.js"
],
"css": [
"assets/ResetPasswordPage-DybfLMAw.css"
]
},
"src/pages/SchedulesPage.vue": {
"file": "assets/SchedulesPage-VLwHd9Sa.js",
"file": "assets/SchedulesPage-Cln6Gk1v.js",
"name": "SchedulesPage",
"src": "src/pages/SchedulesPage.vue",
"isDynamicEntry": true,
"imports": [
"_accounts-BXD0We06.js",
"_accounts-CTfB-Ncr.js",
"index.html"
],
"css": [
@@ -103,7 +97,7 @@
]
},
"src/pages/ScreenshotsPage.vue": {
"file": "assets/ScreenshotsPage-Dtd_MXUX.js",
"file": "assets/ScreenshotsPage-BeyAIC93.js",
"name": "ScreenshotsPage",
"src": "src/pages/ScreenshotsPage.vue",
"isDynamicEntry": true,
@@ -115,7 +109,7 @@
]
},
"src/pages/VerifyResultPage.vue": {
"file": "assets/VerifyResultPage-8_v-5_kc.js",
"file": "assets/VerifyResultPage-Ci85Um-V.js",
"name": "VerifyResultPage",
"src": "src/pages/VerifyResultPage.vue",
"isDynamicEntry": true,