我的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;
答案 0 :(得分:0)
根据Change Logs
,BugFix
和Enhancement
与 CSRF
Cookie相关。
2.0.13 November 03, 2017 updates include
Bug #14542
:确保只有ASCII字符属于CSRF Cookie值,因为二进制数据会导致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)