Загрузка ...

Yii2 - Использование CSRF токена

Для тех, кто еще не знаком с понятием CSRF токен и не понимает, для чего его стоит использовать, вот ссылка для ознакомления.

Одно из приятных новшеств фреймворка Yii2 - это проверка CSRF токена, которая включена по-умолчанию.

Если вы будете использовать обычную HTML форму или обычный AJAX запрос для отправки данных на сервер, вы получите ошибку следующего содержания: Bad Request (#400): Unable to verify your data submission.

Эта ошибка возникает в том случае, если при отправке данных на сервер не было указано значение CSRF-токена в одном из параметров запроса.

Разумеется, вы можете отключить данную опцию (настройку) вашего приложения в конфигурационном файле yii-фреймворка или в текущем контроллере (обработчике запроса), но я категорически не советую вам этого делать.

Несколько способов использования CSRF токена

1. Используйте виджет для создания форм, чтобы автоматически включить в форму скрытое поле со значением CSRF токена;

//
	use yii\bootstrap\ActiveForm;
	
	$form = ActiveForm :: begin(['id' => 'custom-form']);
	
	echo $form->field($model, 'username')->textInput();
	
	echo $form->field($model, 'password')->passwordInput();
	
	ActiveForm :: end();
//

2. Указывайте значение параметра CSRF токена в HTML форме;

//
	use yii\helpers\Html;

	echo Html :: hiddenInput(\Yii :: $app->getRequest()->csrfParam, \Yii :: $app->getRequest()->getCsrfToken(), []);
//

3. С помощью функции csrfMetaTags() добавьте в шаблон мета-тег со значением CSRF токена для использования его в ajax-запросах;

//
	use yii\helpers\Html;

	echo Html :: csrfMetaTags();
//

Для тех, кто не переживает о безопасности приложения (проекта), ниже привожу код для отключения проверки CSRF-токена.

//

	// Отключение в конфигурационном файле

	'components' => [
		 'request' => [
			  'enableCsrfValidation' => false,
		  ],
	],

	// Отключение в контроллере

	public function beforeAction($action)
	{
		$this->enableCsrfValidation = false;
		
		return parent :: beforeAction($action);
	}

//

Вам требуются услуги или консультация специалиста по веб-разработке?

Свяжитесь со мной
Цвет элементов сайта