什么是 CSRF?模板里的 {$csrf} 能去掉吗?
每个 POST 表单里都有 <input type="hidden" name="_token" value="{$csrf}">,看起来多余,能删吗?
回答(1)
已采纳最佳答案-
2026-10-25 回答 最佳答案
不能删。这是 CSRF(跨站请求伪造)防护:恶意站点诱导已登录的访问者向你的站点提交请求(比如伪造"改密码""发评论"表单),没有 token 校验时服务器无法区分请求是不是用户本意的。
工作方式:每次渲染页面时生成一次性 token 放进
{$csrf},POST 提交时后端校验_token字段,缺失或不匹配返回 419。实践要求:
- 所有 POST 表单都带
{$csrf}(问答的采纳、评论、登录、后台所有表单都是这么做的); - 自己写插件/模板时漏掉这个字段,表单会莫名 419,先查这里;
- AJAX 提交也一样,把 token 一起带上。
顺带一提:XSS 是另一类问题(脚本注入),由内容入库前的统一净化处理,两者不要混淆。
- 所有 POST 表单都带
写回答
该问题已解决,不再接受新的采纳。