回复框去掉管理员口令与处理状态;带 token 时昵称/邮箱锁定为只读

用户三个问题,本质是同一件事:token 就是身份凭证,那就不该再让表单声明身份。

一、去掉管理员口令 / 处理状态
  用户:「回复这个地方,下面有个管理员口令,还有处理状态,都不要填了,
        只保留回复内容,加上人机验证就可以了」
  - 删掉表单里这两块,删掉 admin-pw/admin-status 的 CSS 与 bindAdminToggle 的 JS
  - 管理员身份只认后台登录态(fb_is_admin()),不再从公开表单收口令
  - 状态流转只在后台详情页那排按钮里做

二、带 token 时昵称/邮箱锁定为只读
  用户:「如果他带着 Token 进来之后邮箱又让他改了,我们又没办法知道谁是谁了」
  - 有 token = 已证明是提交人本人,表单不再让填昵称/邮箱,
    改为显示只读的「回复身份」块(原昵称 + 原邮箱)

三、服务端强制(关键)
  🔴 前端设成 hidden 是不够的 —— hidden 可以被改:
     谁拿到链接、改个 email 提交,这条反馈的联系人就变成他的了。
     所以服务端在 isOwnerView 时**直接丢弃 POST 里的 name/email**,
     一律以库里那条帖子的 author_name / author_email 为准。
     身份校验必须在服务端做。

验证(这次确保请求真的通过人机验证,不是被验证码挡住造成的假通过):
  题目「2 乘以 7」答 14 → 跳转到 #r3,回复确实入库;
  提交的是 黑客改名 / attacker@evil.example,
  实际入库 name=jervis email=zeussun@msn.com —— 伪造的两个字段都被丢弃。
  另外:无 token 的普通访客仍可自由填昵称邮箱;全站已无「管理员口令」残留。
  测试回复已清理,reply_count 已同步。
This commit is contained in:
2026-11-03 10:02:57 +08:00
parent 8bcee46b8a
commit 8763e8e17f
5 changed files with 213 additions and 63 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ if (!defined('FB_ROOT')) {
define('FB_ROOT', dirname(__DIR__));
// 静态资源版本号:改 assets/ 下的 css/js 后把这个数字 +1,
// 让浏览器与 CDN 缓存失效。全站只此一处,别再往页面里写死数字。
if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 30); }
if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 31); }
}
/* ------------------------------------------------------------------