AWS Cloudfront 导致 CSRF 令牌不匹配异常

Posted

技术标签:

【中文标题】AWS Cloudfront 导致 CSRF 令牌不匹配异常【英文标题】:AWS Cloudfront causing CSRF Token Mismatch Exception 【发布时间】:2018-07-29 15:20:32 【问题描述】:

好的,你好,我已经在 AWS ELB 上部署了我的 Laravel 应用程序,并为我的应用程序设置了 Cloudfront 分发。现在我正面临 CSRF 令牌不匹配。我知道这个错误可能是由多个可能错误的配置值引起的。现在我过去已经设法自己解决了这个问题,但那是很久以前的事了,我不知道我在哪里做了什么。因此,如果您对可能出现的问题和位置有一些提示,那么一定要按我的方式发送。谢谢

编辑:切换到 Cloudfront 后发生异常。我的问题是让它与 Cloudfront 一起工作。

【问题讨论】:

这是在尝试提交表单时还是什么? @Option 是的,它发生在我提交表单时。抱歉,忘记提了。在其他任何场合都没有发生在我身上。 在打开的<form>标签下添加 csrf_field() 【参考方案1】:

所以问题在于 cookie 的转发,尤其是 XSRF_TOKEN cookie。默认情况下,Cookie 不会通过云端转发,您必须设置白名单才能做到这一点。只需在“行为”部分编辑云端分发。另一个要考虑转发的 cookie 是 laravel_session(如果您使用 cookie 会话)和 remember_*(如果您使用记住登录功能)。

【讨论】:

+1k 花了一周的时间试图弄清楚这一点,我终于意识到这可能与 AWS Cloudfront 有关,并找到了您的帖子。送你一个大大的拥抱!!!

以上是关于AWS Cloudfront 导致 CSRF 令牌不匹配异常的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 上的 Rails 应用程序返回 422 并显示“无法验证 csrf 令牌”

csrf 令牌会在 laravel 中的每个请求上自动重新生成,这会导致生产服务器上的 csrf 令牌不匹配

没有密钥对(RSA 私钥)的 aws cloudfront 中的签名 cookie

安全性 - 没有 XSS 预防,CSRF 预防无用?

使用域名浏览时的 Ajax 问题

直接访问登录表单时未设置会话 cookie,导致 CSRF 令牌无效