如何解决此错误HTTP 400 - 无法验证您在Yii2中的数据提交?

时间:2018-02-27 18:46:02

标签: yii2 yii2-basic-app

我的Yii 2应用程序进展顺利,直到我收到一个错误的HTTP请求的异常错误。

  

HTTP 400无法验证您的数据提交。

我查了一下,大部分文献表明原因是由CSRF问题引起的。但是,CSRF部分中的HTML组件都已到位,隐藏字段正在提交正确的令牌。

其他信息

  

Yii version = 2.0.12 App Basic

     

PHP版本= 5.6

     

OS = Ubuntu

我已禁用主机的所有安全固件但仍然出现错误。请帮助该网站已经在Prod中,我无法提前找到如何解决这个问题。

幅/配置/ main.php

$config = [
'components' => [
    'session' => ['class' => 'yii\web\DbSession'],
    'request' => [
        'cookieValidationKey' => 'AAOSL2no3kbkJwRA4CNwDuB5g5T5_58t',
    ],
    'cache' => [
        'class' => 'yii\caching\FileCache',
    ],
    'user' => [
        'identityClass' => 'app\models\User',
        'enableAutoLogin' => true,
    ],
    'errorHandler' => ['errorAction' => 'site/error'],
    'log' => [
        'traceLevel' => YII_DEBUG ? 3 : 0,
        'targets' => [
            [
                'class' => 'yii\log\FileTarget',
                'levels' => ['error', 'warning'],
            ],
        ],
    ],
    'db' => $db,

    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
        ],
    ],

],
'params' => $params,
];

if (YII_ENV_DEV) {
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
    'class' => 'yii\debug\Module',
    //'allowedIPs' => ['127.0.0.1', '::1'],
];

$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
    'class' => 'yii\gii\Module',
    //'allowedIPs' => ['127.0.0.1', '::1'],
];
}
return $config;

2 个答案:

答案 0 :(得分:0)

根据Change LogsBugFixEnhancement CSRF Cookie相关。

2.0.13 November 03, 2017 updates include

  • Bug #14542 :确保只有ASCII字符属于CSRF Coo​​kie值,因为二进制数据会导致ModSecurity和某些浏览器出现问题(samdark)

  • Enh #14087 :添加了 yii\web\View::registerCsrfMetaTags() 方法,可以动态注册CSRF标记,确保缓存不会干扰(RobinKamps)。< / p>

2.0.14 February 18, 2018 updates include

  • Bug #15317 :如果给出空值,则重新生成CSRF令牌
  • Enh #15496 :( CVE-2018-6009):CSRF令牌现已在更改身份时重新生成(samdark,rhertogh)(sammousa)

因此,在项目根目录中通过终端更新框架到最新版本2.0.14使用composer update,更新后确保您拥有

 <?= Html::csrfMetaTags () ?>

在您使用<head>的{​​{1}}文件的layout标记内或任何其他自定义名称。

如果仍然存在,您可以针对main.php

中的特定操作禁用它
beforeAction

或添加

的特定控制器
public function beforeAction($action)
{            
    if ($action->id == 'action-name') {
        $this->enableCsrfValidation = false;
    }

    return parent::beforeAction($action);
}

答案 1 :(得分:0)

在视图中添加<?= Html::csrfMetaTags() ?>,或添加布局(main.php)