什么是 CSRF?模板里的 {$csrf} 能去掉吗?

已解决 提问于 2026-10-25 提问者:超级管理员 24 次阅读

每个 POST 表单里都有 <input type="hidden" name="_token" value="{$csrf}">,看起来多余,能删吗?

回答(1)

已采纳最佳答案
  • 2026-10-25 回答 最佳答案

    不能删。这是 CSRF(跨站请求伪造)防护:恶意站点诱导已登录的访问者向你的站点提交请求(比如伪造"改密码""发评论"表单),没有 token 校验时服务器无法区分请求是不是用户本意的。

    工作方式:每次渲染页面时生成一次性 token 放进 {$csrf},POST 提交时后端校验 _token 字段,缺失或不匹配返回 419。

    实践要求:

    1. 所有 POST 表单都带 {$csrf}(问答的采纳、评论、登录、后台所有表单都是这么做的);
    2. 自己写插件/模板时漏掉这个字段,表单会莫名 419,先查这里;
    3. AJAX 提交也一样,把 token 一起带上。

    顺带一提:XSS 是另一类问题(脚本注入),由内容入库前的统一净化处理,两者不要混淆。

写回答

该问题已解决,不再接受新的采纳。