v1.0.51: 批次1架构筑基 - 1)版本迁移(common/migrate.php+schema_versions+natsort迁移文件);2)登录安全(bcrypt平滑迁移login/user_add/user_update旧sha1命中自动重写+system_login_attempts限流+session加固httponly/samesite/secure);3)CSRF Token(服务端checkCsrf+auth/csrf.php登录页取token+前端common.js/login.js统一携带X-CSRF-Token);4)统一基座common/Api.php并存量强制迁移全部70个endpoint(Api::boot按public/super/module/permissions分流,写接口强制checkAjax+checkCsrf,全局异常处理);5)前端收敛(common.js新增esc转义别名);6)REV-4硬数据来源渠道可编辑(hard_update+补全弹窗下拉);7)prepared卫生(soft_update.php修复+analysis.php表名白名单REV-9)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
qianqiuwanzi
2026-09-17 14:48:17 +08:00
parent 69fd4246c2
commit c86f08c325
91 changed files with 1072 additions and 463 deletions
+19
View File
@@ -0,0 +1,19 @@
-- ============================================================
-- v1.0.51 批次1「架构筑基」迁移
-- 1) 登录限流表(security.php 的 checkLoginThrottle/recordLoginAttempt 依赖)
-- 2) 清理 v1.0.48 遗留的 preliminary_data 冗余备份表
-- ============================================================
CREATE TABLE IF NOT EXISTS `system_login_attempts` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '登录账号',
`ip` VARCHAR(45) NOT NULL DEFAULT '' COMMENT '客户端IP(IPv6最多45字符)',
`success` TINYINT NOT NULL DEFAULT 0 COMMENT '1=成功 0=失败',
`attempt_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_ip_user_time` (`ip`, `username`, `attempt_time`),
KEY `idx_attempt_time` (`attempt_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='登录尝试记录(限流/防爆破)';
-- 清理 v1.0.48 遗留冗余备份表(架构评审 REV-ARCH-1)
DROP TABLE IF EXISTS `preliminary_data_bak_20260810b`;
+12
View File
@@ -0,0 +1,12 @@
-- ============================================================
-- schema_versions 迁移版本表(批次1 迁移管理基座)
-- 由 tools/migrate.php 首次引导建表;记录每次已应用迁移的版本与文件 checksum
-- ============================================================
CREATE TABLE IF NOT EXISTS `schema_versions` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`version` VARCHAR(64) NOT NULL COMMENT '迁移版本号,如 v1.0.51',
`applied_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`checksum` CHAR(32) NOT NULL COMMENT '迁移文件 md5,防旧脚本被改',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_version` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库迁移版本表';