Как правильнее проверять CSRF токены?

Думаю, это простой вопрос, и тем не менее... Где то встречаю такой вариант проверки CSRF токенов:

if (!$this->isCsrfTokenValid('delete', $request->request->get('token'))) {
            return new Response('Error');
        }


А где то вот так (т.е. к ключевому слову добавляется ID объекта):

if (!$this->isCsrfTokenValid('delete' . $entity->getId(), $request->request->get('token'))) {
            return new Response('Error');
        }


1. Как правильнее?
2. Нужно ли еще более конкретизировать ключевое слово, типа не просто `delete`, а `delete-image` например?
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
voronkovich
@voronkovich
Оба способа правильные. Просто второй более устойчив к CSRF-атакам. Например, компонет форм по умолчанию использует имя класса формы для поля "intention" ("ключевое слово", если использовать ваше определение): https://github.com/symfony/form/blob/a0386553fabb5...

С другой стороны, есть мнение, что использование различных токенов, не делает приложение более безопасным. См. https://github.com/symfony/symfony/issues/18115

Лично я использую первый вариант т.е. один токен на все приложение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы