前端发请求加了自定义头,后端还是报CSRF错误?

♫采涵 阅读 45

我在用 Axios 发请求时手动加了个 X-Requested-With: XMLHttpRequest,但后端(Laravel)还是返回 419 CSRF token mismatch。不是说只要带自定义请求头就能绕过 CSRF 检查吗?

我试过在中间件里打印请求头,确实收到了这个 header,但 Laravel 好像根本不认。是不是我理解错了什么?

我来解答 赞 8 收藏
二维码
手机扫码查看
1 条解答
爱学习的一茹
你对 CSRF 的理解有点偏差。加自定义头并不能绕过 Laravel 的 CSRF 验证,这是个安全机制,不能这么轻易被规避的。

在 Laravel 里要解决这个问题,你需要确保正确设置了 CSRF token。最简单的办法就是在表单里加上 <meta name="csrf-token" content="{{ csrf_token() }}"> 然后在 axios 请求中配置:

window.axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').getAttribute('content');


这样每次请求都会带上正确的 CSRF token。

顺便提醒一下,不要试图通过伪造请求头来绕过 CSRF 检查,这会带来安全隐患,比如恶意网站可能利用这个漏洞进行跨站请求伪造攻击。按照框架规范来做才是正道,虽然有时候会感觉麻烦,但为了安全值得这么做。
点赞
2026-03-25 19:57