安全闸门最小化信息透露:非白名单请求统一返 nginx 原生 404,新增 DB 引导标记
- secGatePage / secGateApi 不再回 403(页面 HTML 与 JSON),一律 secNginx404(), 探测者分不清是文件不存在还是被拦截;拒绝仍写 db/security.log。 - 新增 secIsBootstrapped() 双判据:config SEC-UPDATE 区已有令牌(既有站点即刻生效) 或 web.db 的 sec_bootstrap 标记表有行(secWriteConfig 保存时写入)。 - 全新部署首次访问(两者皆空)为引导模式:放行并把 admin.php 跳到 admin_2fa_setup.php, 配齐白名单/访问令牌/2FA 后一保存即自动转强制;读库异常从严按已引导。 - secTokenGate 引导模式不强制,已引导后照旧 ?token= 否则 404。 - setup 页状态卡片新增「门禁状态」展示;config.php 注释同步 404 与引导标记说明。 - 不调用 SQLite3::enableExceptions(false):PHP 8.4 该写法触发 E_DEPRECATED, 提前输出会把 nginx404 的状态行挤掉(404 变 200),改由 @ + try/catch 兼容新旧版本。
This commit is contained in:
@@ -2,7 +2,8 @@
|
||||
// ★ 紧急加固(2026-09-29):三层加固的第三层 + 第二层
|
||||
// 第三层动态令牌:必须 admin.php?token=<SEC_ACCESS_TOKEN> 才放行,
|
||||
// 不带/带错令牌一律返回 nginx 原生 404 页(与文件不存在时完全一致)。
|
||||
// 注意必须放在 secGatePage() 之前 —— 否则白名单 403 会暴露这个文件确实存在。
|
||||
// 注意必须放在 secGatePage() 之前 —— 令牌层先判(两层现已统一返回 nginx 404,
|
||||
// 但顺序仍要保持:引导模式下令牌层放行、页面层负责跳配置页)。
|
||||
// 第二层 IP 白名单 —— 页面本身也只对白名单 IP 开放。
|
||||
require_once __DIR__ . '/security.php';
|
||||
secTokenGate();
|
||||
|
||||
Reference in New Issue
Block a user