页脚入口与安装向导;加固管理员口令存储

需求落实:
1. 页脚常驻「管理后台」链接,不用再手敲 admin.php。
2. 页脚「由 FeedLite 驱动」中的 FeedLite 改为超链接(指向开源仓库);
   后台新增「页脚」设置组,可关闭整句(关闭后只留管理后台链接),也可改链接地址。
3. 管理员口令存储方式在后台如实展示:数据库 settings.admin.password_hash,
   存 bcrypt 单向哈希(不可逆),明文不落盘。
4. 新增安装向导 install.php:data/ 下没有数据库时自动 302 引导;
   体检环境 -> 填站点信息与口令 -> 生成 config.php -> 建库建表 -> 完成。

顺带修掉一个真实安全隐患:
  config.php 里的出厂占位口令 CHANGE_ME_admin 原先可被当作有效口令登录后台
  (等于公开仓库里就写着线上后门口令)。现改为占位/空值一律拒绝,
  未设口令时后台明确提示去安装向导,不再含糊报「口令不正确」。

实现要点:
- 新增 fb_cfg_file():只读配置文件、不叠加 settings 表、绝不触达数据库。
  「是否已安装」以数据库文件是否存在为判据,而 fb_cfg() 读 settings 会触发
  fb_db() 就地建库 —— 那会把安装态自己造出来,所以判定必须走不碰库的通道。
- bootstrap 只在已安装时建库;未安装则 302 到 install.php(CLI 下报错退出)。
- fb_settings_flat() 在未安装时直接返回空,杜绝任何隐式建库。
- install.php 用文本级替换生成 config.php,保留全部注释与 OSS/SMTP 段落;
  生成的 PHP 用 token_get_all(TOKEN_PARSE) 校验后才落盘。
- 页脚链接只放行 http/https,后台保存时校验(防 javascript: 伪协议)。
- style.css 页脚行改 flex,版本号 v6 -> v7。

验证:
- php -l 全量通过;现有回归 25/25、附件专项 13/13 保持通过。
- 安装向导专项 60/60(含「明文口令未写入任何文件」「数据库字节里搜不到明文」)。
- 反向验证:撤销三处修复后对应断言确实失败(断言非装饰)。
- 几何检查:本机 15/15 + 页脚专项全过;线上真实 URL 15/15 + 页脚专项全过。
- 线上真机冒烟 22/22。
This commit is contained in:
2026-09-28 22:53:55 +08:00
parent 1401ad899b
commit 27187b38f1
8 changed files with 654 additions and 39 deletions
+19 -3
View File
@@ -23,9 +23,25 @@ return [
// 例如:'https://feedback.example.com'
'base_url' => '',
/* ---------------- 安全 ---------------- */
// 管理员口令:在"回复"表单里填入它,即以「官方」身份回复(高亮显示),并触发邮件通知。
// ★★ 请务必修改! ★★
/* ---------------- 页脚 ----------------
* 页脚永远会显示「管理后台」入口;这里的开关只控制右侧那句版权说明。
* show_credit = false:页脚不再出现「由 FeedLite 驱动」,只留管理后台链接。
*/
'footer' => [
'show_credit' => true,
'credit_url' => 'https://code.yangyq.net/laoyang/FeedLite', // 页脚「FeedLite」二字指向的地址
],
/* ---------------- 安全 ----------------
* 管理员口令的存放规则(重要):
* · 正常安装(走 install.php,或登录后台改口令)→ 口令以 **bcrypt 单向哈希**
* 存在数据库 settings 表的 admin.password_hash,**明文不落盘**。
* · 下面这个 admin_password 只是「初始值」通道,且**出厂占位值已被程序明确禁用**:
* 值仍为 CHANGE_ME_admin 时,任何人(包括你)都无法用它登录后台。
* · 想手工指定初始口令,就把下面这行改成你自己的口令;登录一次后建议立即改掉,
* 改完即转为数据库哈希存储、这里可以再改回占位值。
*/
// ★★ 留空或保持占位值 = 未设置口令(后台不可登录,需先跑安装向导)★★
'admin_password' => 'CHANGE_ME_admin',
// API 令牌:供自动化脚本 / AI 读取数据用。★ 请务必修改 ★