在使用Symfony / Sonata时,我们面临 CSRF令牌无效错误。
之前,相同的代码完美无缺。我们确保表单正确发布令牌。奇怪的是,错误仅出现在所选实体上。
在这里浏览所有其他Q / A并不能解决问题。
如果客户端和服务器之间的一般通信运行良好,还有什么可以使CSRF令牌无效?
答案 0 :(得分:1)
<强>解决方案:强>
增加 php.ini 中的max_input_vars
,至少超过默认的1000:
max_input_vars=2000
<强>原因:强> 我们在nginx日志中发现了导致CSRF令牌失败的原因。实际上,令牌失效只是一般问题的症状。
以下三个错误日志条目允许解决方案:
* 357395将客户端请求主体缓冲到临时文件/ var / cache / nginx / client_temp / 0000000742,客户端:192.168.10.152, server:xxx request:&#34; POST / admin / entity / 1234 / edit?uniqid = s588b2b142c3d2 HTTP / 1.1&#34;,host:&#34; xxxx&#34;, 推荐人:&#34; http://xxx/admin/entity/1234/edit&#34;
max_input_vars
定义了$ _POST请求将接受多少输入变量。如果超过1000的(默认)限制,PHP将从请求&#34;中截断&#34;进一步输入变量[...]。因此,通过PHP从$ _POST var中截断了CSRF令牌。 error_admin:2017/01/27 12:19:19 [错误] 51723#51723:* 357395 FastCGI 发送到stderr:&#34; PHP消息:PHP警告:未知:输入变量 超过1000.在php.ini中增加限制更改max_input_vars。 在第0行&#34;从上游读取响应头, 客户端:192.168.10.152,服务器:xxx,请求:&#34; POST / admin / entity / 1234 / edit?uniqid = s588b2b142c3d2 HTTP / 1.1&#34;,上游: &#34; fastcgi://127.0.0.1:9000&#34;,主持人:&#34; xxx&#34;,推荐人: &#34; XXX /管理/实体/ 1234 /编辑&#34;
2017/01/27 12:19:19 [info] 51723#51723:* 357395 recv()失败(104: 发送到客户端,客户端时由对等方重置连接: 192.168.10.152,服务器:xxx,请求:&#34; POST / admin / entity / 1234 / edit?uniqid = s588b2b142c3d2 HTTP / 1.1&#34;,上游: &#34; fastcgi://127.0.0.1:9000&#34;,主持人:&#34; xxx&#34;,推荐人: &#34; XXX /管理/实体/ 1234 /编辑uniqid = s588b2b142c3d2&#34;