Ошибка 400 невозможно определить csrf что это

Программа: 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

Понравилась статья? Поделить с друзьями:
  • Ошибка 400 неверный запрос как исправить
  • Ошибка 400 на ютубе на телефоне что делать
  • Ошибка 400 на сайте что это означает
  • Ошибка 400 на портале поставщиков
  • Ошибка 400 на авито