У меня есть функция ajax
которая запускает удаление записи из моей базы данных.
Мне нужно сделать проверку CSRF
для того же самого. Как я могу это сделать?
Я отправляю CSRF cookie
вместе с моим почтовым запросом, но Yii 2.0
не проверяет его, и любой вход, который передается через ajax, достигает сервера.
Как сделать проверку CSRF
для запросов ajax.
Нужно ли нам вручную устанавливать cookie и проверять?
Вам не нужно вручную устанавливать cookie.
Если вы используете токен JQuery CSRF, он будет отправлен автоматически.
Например, для AngularJS вы можете добавить его вручную, чтобы запросить такие параметры:
yii.getCsrfParam(): yii.getCsrfToken()
Убедитесь, что у вас включен YiiAsset
.
В противном случае вы можете получить их из метатег (это в основном то, что делают эти два метода):
$('meta[name=csrf-param]').prop('content'): $('meta[name=csrf-token]').prop('content')
Также обратите внимание, что для включения проверки CSRF свойство свойства enableCsrfValidation
свойства Controller
и Request
должно иметь значение true
.
Обновить:
Еще одна важная вещь, чтобы понять:
Маркер CSRF будет проверяться только по этим методам: GET
, HEAD
, OPTIONS
.
Также убедитесь, что в главном макете есть <?= Html::csrfMetaTags ?>
.
Наконец, я определил, что
<?= Html::csrfMetaTags() ?>