【问题标题】:YII2: bad Request (#400) Unable to verify your data submission?YII2: bad Request (#400) 无法验证您的数据提交?
【发布时间】:2017-06-20 09:00:46
【问题描述】:

当我尝试 swith 进行 CSRF 验证时,我收到了这个错误。 我在主布局中有Html::csrfMetaTags(),它运行良好。

<meta name="csrf-param" content="_csrf-frontend">
<meta name="csrf-token" content="QmcxU050NEIzD2AaDScBdxQqHAkFM04XCT9AFhZNQSlyIlISYy1yMg==">

我使用activeForm,我检查了POST Query,发现csrf信息发送正确。

_csrf-frontend:Ukp1TC5KYUgaEBQIWwg4cCI7OCZEf1YYERJMfkIuAH84DD8ObQlTEA==

我的配置部分:

'request' => [
    'cookieValidationKey' => 'LWCVTaYxV7aK6dqMWNKm1C7HMit6bJKa',
    'csrfParam' => '_csrf-frontend',
    'enableCsrfValidation' => true,
],

附:元名称中的 csrf-token 数据和 post 查询中的数据不同,这样可以吗?

【问题讨论】:

  • 您的浏览器中是否启用了 cookie,或者您的 yii 应用是否启用了会话?如果在请求设置中添加“'enableCookieValidation' => true”,会发生什么?

标签: yii2 csrf


【解决方案1】:

您确定要在每个表单中发送参数吗?

在您的表单中,您必须添加一个隐藏参数,如下所示:

echo  Html::hiddenInput(
   Yii::$app->request->csrfParam,
   Yii::$app->request->csrfToken
);

所以每个请求都会收到 CSRF 数据,我在布局层面还没有做。

【讨论】:

  • 我使用 ActiveForm 来生成 Html 代码。我检查了 html 代码,发现隐藏字段包含 csrfToken 和 csrfParam 数据。我也在发送的帖子查询中检查了数据。有同样的 - 一切都很好
猜你喜欢
  • 1970-01-01
  • 2021-12-30
  • 2015-10-15
  • 2017-02-12
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
相关资源
最近更新 更多