我在AWS负载均衡器后面的群集中使用Play。为防止CSRF攻击,我将@ CSRF.formFields添加到所有表单提交。但我随机得到403错误,我想这是因为服务器发出的令牌 服务器B不会接受。
你以前遇到过这个问题吗?您是否需要将会话存储在分布式缓存或数据库中? Play中是否有我不知道可以解决此问题的功能?
顺便说一下,类似的问题被问到here没有答案。
感谢您的帮助!
答案 0 :(得分:0)
尝试把它放在你的application.conf
中trustxforwarded=true
或检查您的负载均衡配置,也许在这里您会找到一些有用的信息 https://www.playframework.com/documentation/2.3.x/HTTPServer
答案 1 :(得分:0)
据我所知,"申请秘密"是整个应用程序的属性,而不是单个实例/服务器。
因此,它应该在群集中的所有服务器上都相同。这自然会#34;修复" CSRF令牌验证。
另一个例子 - 会话:默认情况下,会话数据存储在会话cookie的客户端,会话cookie使用应用程序机密作为盐进行签名 - 如果它在同一应用程序的不同服务器上有所不同 - 这会破坏客户端会话的整个想法,因为会话cookie只能在一台服务器上有效。
P.S。关于Django的密钥的类似帖子:Django SECRET_KEY in a distributed setup