前端POST请求被漏洞扫描工具标记CSRF漏洞,但后端已加防伪cookie该怎么办?

爱学习的欢欢 阅读 68

我在开发登录功能时,前端用axios发送POST请求,后端已通过nginx设置了Csrf-Token cookie且验证了请求头中的token。但最近漏洞扫描工具提示”缺少CSRF防护”,明明后端已经加了防伪机制,该怎么排查这个问题?

我的axios配置是这样的:axios.defaults.withCredentials = true,并且在请求头里有带上X-Csrf-Token参数。后端用的是ThinkPHP框架,已经按照文档配置了token验证中间件。

奇怪的是,当我用Postman手动带上cookie和header参数就能成功请求,但扫描工具始终报这个漏洞。是不是需要在前端页面额外添加隐藏字段?或者nginx配置哪里漏了?

我来解答 赞 12 收藏
二维码
手机扫码查看
2 条解答
海淇 ☘︎
你后端已经加了token验证,但漏洞扫描工具仍然报CSRF,说明它没检测到你前端返回页面中有token的嵌入,这是常见的误报问题。

这类工具通常是通过扫描HTML响应内容来判断是否含有CSRF防护机制,比如隐藏字段 。你用axios发请求,token放在header里,且后端验证token逻辑没问题,但**前端页面没返回token字段**,导致扫描工具认为“无防护”。

解决办法也很直接:在登录页面里加一个带token的隐藏字段,哪怕你不用它提交,只是为了通过扫描。

在ThinkPHP模板中可以这样加:


这样漏洞扫描工具就能检测到token存在,不会再报“缺少CSRF防护”。

另外,nginx设置Csrf-Token cookie这个做法并不推荐,建议token由后端框架管理,比如ThinkPHP的Request.token。这样每次页面渲染都可以把token写进HTML,也方便和扫描工具对接。

总结:
1. 在前端登录页加一个隐藏的token字段;
2. 确保后端框架能正确生成并注入token到页面;
3. 漏洞扫描工具只看HTML内容,不看你header或js逻辑;
4. 扫描工具不是人,它不懂你后端处理流程,只看前端返回有没有token痕迹。

加完token隐藏字段基本就能过扫了。
点赞 4
2026-02-03 00:40
南宫清梅
问题在于扫描工具可能没正确带上cookie,导致后端验证失败。你需要确保前端在每个请求前自动获取并设置token:

axios.interceptor.request.use(config => {
config.headers['X-Csrf-Token'] = document.cookie.replace(/(?:(?:^|.*;s*)Csrf-Tokens*=s*([^;]*).*$)|^.*$/, "$1");
return config;
});


同时确认nginx配置中设置了正确的跨域和cookie属性,比如HttpOnlySameSite
点赞 7
2026-01-29 09:02