Программа: Mailwizz
Действие: импорт списков / загрузка файлов / сохранение в базу данных
Ошибка: Ошибка 400!
Невозможно определить CSRF.
Причина и решение: Ошибка происходит, когда вы загружаете файл большего размера, чем разрешено лимитом PHP, и для передачи токена CSRF нет места.
Решение состоит в том, чтобы увеличить лимит загрузки из вашего файла настроек PHP (php.ini).
Примечание:
Ошибка «Не удалось проверить токен CSRF» обычно появляется, когда вы отправляете форму, содержащую поле для загрузки файла, и выбираете файл, размер которого превышает разрешенный размер файла для загрузки на ваш сервер.
MailWizz не контролирует это поведение, размер загружаемого файла определяется вашим веб-сервером и вашими настройками PHP.
Для веб-сервера nginx прочтите эту статью .
Информацию о веб-сервере Apache с PHP см. В этой статье .
О самом PHP см. В этой статье .
Поскольку это изменение на стороне сервера, вам может потребоваться связаться с вашим хостингом, чтобы помочь вам, или нанять системного администратора, который внесет изменения за вас.
В vesta Cp обратите внимание на значение этой директивы post_max_size / upload_max_filesize и если он маленький — увеличьте его.
Обратите внимание что маленькие лимиты других директив, таких как к примеру memory_limit — так же будут влиять на работу Вашего MailWizz
Перейти к содержимому
Такая ошибка обычно говорит, что проблема с токеном CSRF. Токена нет или токен не тот. Этот токен нужно передавать как в POST так и в AJAX запросах.
На английском эта ошибка звучит так:
Bad Request (#400): Unable to verify your data submission
Проблему можно решить тремя способами:
Два неправильных способа — отключить проверку для всего приложения в конфиге или отключить в конкретном месте. Смотрите код ниже:
//В файле конфигурации отключаем для всего приложения ‘components’ => [ ‘request’ => [ ... ‘enableCsrfValidation’=>false, ... ], ... ], // Отключаем в конкретном месте $this—>enableCsrfValidation = false; |
А теперь правильный способ.
Всегда передавать валидный CSRF токен! В Yii2 для этого есть все инструменты.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//В мета тэгах вашего шаблона echo Html::csrfMetaTags(); //это добавит строки содержащие имя параметра и сам токен <meta name=«csrf-param» content=«_csrf»> <meta name=«csrf-token» content=«OTDOwBtYk-tsjYLIgTAXrqhKwU-WgneMk_TpFcbE6DwPCIu3XRPJhj202Jn0Z3TP4Ry3ecevOcC-x4ZQkKu8dg==»> //В формах <input type=«hidden» name=«_csrf» value=«OTDOwBtYk-tsjYLIgTAXrqhKwU-WgneMk_TpFcbE6DwPCIu3XRPJhj202Jn0Z3TP4Ry3ecevOcC-x4ZQkKu8dg==»> //Если форму создавать методами ActiveForm::begin() и Html:beginForm(), то input будет подставляться автоматически //Если же вы сами создаёте форму, то пишите так <input type=«hidden» name=«<?=Yii::$app—>request—>csrfParam; ?>« value=«<?=Yii::$app—>request—>getCsrfToken(); ?>« /> //Если отправляете ajax запрос, то в javascript можно получить csrf токен из метатэгов var param = $(‘meta[name=»csrf-param»]’).attr(«content»); var token = $(‘meta[name=»csrf-token»]’).attr(«content»); $.ajax({ url: ‘https://help1c.su’, type: ‘post’, dataType: ‘json’, data: {‘data1’: data1, ‘data2’: data2,....., param : token}, }); |
Напечатайонлайн.рф — печатная продукция в Иркутске
-
wra
- Сообщения: 37
- Зарегистрирован: 2009.10.28, 13:48
Проблема с CSRF
Проблема при установке параметра в конфиге:
Код: Выделить всё
'request'=>array(
'enableCsrfValidation'=>true,
),
После этого невозможно удалить запись (например статью или комментарий в моем случае). Вываливает 400-ошибку: «Невозможно определить CSRF.»
Есть идеи как это решить?
-
wra
- Сообщения: 37
- Зарегистрирован: 2009.10.28, 13:48
Re: Проблема с CSRF
Сообщение
wra » 2009.11.12, 14:19
Спасибо. Идея понятна. С реализацией проблема…
Удаление идет по ссылке, на которую наверчена отправка jQuery-формы:
Код: Выделить всё
/*<![CDATA[*/
jQuery(document).ready(function() {
jQuery('#yt0').click(function(){if(confirm('Точно удалить?')) {jQuery.yii.submitForm(this,'/articles/delete/id/10',{});return false;} else return false;});
});
/*]]>*/
Подскажите каким образом сюда можно вставить скрытое поле? Или как то по другому делается?
-
Ozzy
- Сообщения: 269
- Зарегистрирован: 2009.04.02, 15:09
- Откуда: Украина, Одесса
Re: Проблема с CSRF
Сообщение
Ozzy » 2009.11.13, 01:44
Ну так это полюбому submitForm, значит где то вверху форма таки определяется?
-
wra
- Сообщения: 37
- Зарегистрирован: 2009.10.28, 13:48
Re: Проблема с CSRF
Сообщение
wra » 2009.11.13, 18:39
Вот этот:
Код: Выделить всё
/*<![CDATA[*/
jQuery(document).ready(function() {
jQuery('#yt0').click(function(){if(confirm('Точно удалить?')) {jQuery.yii.submitForm(this,'/articles/delete/id/10',{});return false;} else return false;});
});
/*]]>*/
-
samdark
- Администратор
- Сообщения: 9473
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Проблема с CSRF
Сообщение
samdark » 2009.11.13, 22:13
Нет, это то, что получается в итоге. Должен быть PHP-код, который это нагенерил.
-
wra
- Сообщения: 37
- Зарегистрирован: 2009.10.28, 13:48
Re: Проблема с CSRF
Сообщение
wra » 2009.11.15, 12:15
Вот генерация:
Код: Выделить всё
<li><?=CHtml::linkButton('удал',array(
'submit'=>array('articles/delete','id'=>$Article->articleId),
'confirm'=>"Точно удалить?",'class'=>'delete'))?></li>
-
wra
- Сообщения: 37
- Зарегистрирован: 2009.10.28, 13:48
Re: Проблема с CSRF
Сообщение
wra » 2009.11.15, 13:31
Добавление в linkButton:
Код: Выделить всё
'YII_CSRF_TOKEN'=>Yii::app()->request->csrfToken
дало то, что в саму ссылку дабавился этот параметр со значением. Но это не помогло создать скрытое поле (я так понимаю и не должно было). Поясните пожалуйста на примере как добавляется скрытое поле а форму, которая генерится через linkButton(). Либо если можно передавать не только через скрытое поле, то поясните как…
-
delvin
- Сообщения: 85
- Зарегистрирован: 2009.11.13, 15:29
Re: Проблема с CSRF
Сообщение
delvin » 2009.11.15, 19:28
linkButton в этом случае создает post-запрос динамически, т.е. никаких форм не создается и не отправляется.
Попробуй так:
Код: Выделить всё
<li><?=CHtml::linkButton('удал',array(
'submit'=>array('articles/delete','id'=>$Article->articleId),
'params'=>array('YII_CSRF_TOKEN' => Yii::app()->request->csrfToken,),
'confirm'=>"Точно удалить?",'class'=>'delete'))?></li>
Getting Error 400: The CSRF token could not be verified. when trying to delete an item using the default delete link.
$this->menu=array(
array(‘label’=>’Create Use’, ‘url’=>array(‘create’)),
array(‘label’=>’Update Use’, ‘url’=>array(‘update’, ‘id’=>$model->use_id)),
array(‘label’=>’Delete Use’, ‘url’=>’#’, ‘linkOptions’=>array(‘submit’=>array(‘delete’,’id’=>$model->use_id,’confirm’=>’Are you sure you want to delete this item?’)),
array(‘label’=>’Manage Uses’, ‘url’=>array(‘admin’)),
);
Answer:
This problem can be solved by adding ‘csrf’ => true to the linkOptions
$this->menu=array(
array(‘label’=>’Create Use’, ‘url’=>array(‘create’)),
array(‘label’=>’Update Use’, ‘url’=>array(‘update’, ‘id’=>$model->use_id)),
array(‘label’=>’Delete Use’, ‘url’=>’#’, ‘linkOptions’=>array(‘submit’=>array(‘delete’,’id’=>$model->use_id,’confirm’=>’Are you sure you want to delete this item?’),’csrf’=>true)),
array(‘label’=>’Manage Uses’, ‘url’=>array(‘admin’)),
);
I have a very strange problem. I have a login form in Yii which works fine. After moving the website to another server I get
Error 400 The CSRF token could not be verified
I don’t understand why it is working on the development server but not on the new server. here is my code:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>
<div class="row">
<?php echo $form->labelEx($model,'username'); ?>
<?php echo $form->textField($model,'username'); ?>
<?php echo $form->error($model,'username'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'password'); ?>
<?php echo $form->passwordField($model,'password'); ?>
<?php echo $form->error($model,'password'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php $this->endWidget(); ?>
and here is the csrf configuration in my config file:
'enableCsrfValidation' => !isset($_POST['dontvalidate']) ? true : false,
if you need to see the example. Here is the one which is working, and here is the one with the problem