
nonce不是用户权限,也不应当作不可重复使用的单次令牌。敏感动作需要同时核对请求保护、用户身份和相应能力,不能因为一个nonce有效,就允许调用者删除或修改任意对象。
先明确nonce解决的范围
WordPress nonce可帮助验证请求与特定动作、用户环境和时间窗口的关系,常用于降低跨站请求伪造风险。它并不自动证明用户有某个业务权限。前端拿到值后也可能重复提交,因此不能仅凭它实现订单或付款幂等。
服务端仍要检查能力
修改文章、删除用户或导出数据前,应检查当前用户是否有对应动作和对象的能力。验证顺序需保证没有授权时不产生副作用。隐藏按钮、仅给管理员页面输出nonce,都不能替代真正处理请求的服务端判断。

注意身份变化与缓存
登录或退出后,先前页面中的nonce可能不再适用;长时间缓存包含nonce的页面也可能产生过期问题。排查时应分清nonce失效、认证缺失与权限不足,不通过永久延长期限或取消校验来掩盖缓存设计错误。
测试失败分支不改变数据
使用受控测试对象分别验证缺失nonce、错误nonce、低权限用户和授权用户。失败请求应有清楚错误且无数据修改,成功操作也应防止业务层重复处理。日志记录错误类型即可,不需要保存仍有效的完整nonce值。
关键区别

nonce校验:保护特定请求;不代表用户有权。
能力检查:允许动作与对象;仍需服务端执行。
业务幂等:防止重复处理;不能仅依赖nonce。
怎样确认处理到位
无效或未授权请求均不改变对象,授权请求完成预期动作,缓存与身份变化后的错误能够被正确识别和恢复。
容易误判的边界
WordPress nonce名称容易让人误以为严格一次性;不要将其作为身份认证、权限授予或支付去重的唯一依据。
