У меня вопрос об использовании токена CSRF по ссылке. В моем случае я хочу защитить свои ссылки на удаление с помощью токена CSRF. Я нашел, как это сделать:Использовать токен CSRF по ссылке
На мой взгляд, я использую функцию веточка csrf_token() (http://symfony.com/doc/current/reference/twig_reference.html#csrf-token):
<a class="btn btn-danger" value="Delete" href="{{ path('tube_delete', { 'id': tube.id, 'token': csrf_token('deleteTube-' ~ tube.id) }) }}">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
</a>
И в мой контроллер, метод isCsrfTokenValid() (http://symfony.com/doc/current/controller/csrf_token_validation.html):
if (!$this->isCsrfTokenValid('deleteTube-'.$tube->getId(), $request->get('token'))) {
$this->addFlash('warning', 'The token is not valid !');
}
Все это прекрасно работает, но у меня общий вопрос о маркере CSRF, как вы можете видеть, я использую другой маркер для каждого удаления линии связи (например: deleteTube-1, deleteTube-2, ... с идентификатором объекта в токене-id). Затем, в моей сессии, у меня появилось много токенов csrf.
Это хороший метод, или я должен использовать тот же токен для всех ссылок на удаление для класса? С token_id вроде: deleteTube для Tube, deleteComment для комментариев и т. Д.? Я думаю, что лучше иметь другой токен для каждой ссылки, но, может быть, это накладные расходы?
Большое спасибо за помощь.
PS: Извините за мой английский ... :-(
Я думаю, что главный маркер CSRF в Symfony используется в формах , только для каждого проекта. Так почему же плохой идеей для вас использовать только одну для всех ссылок? –
Например, если я иду по моей форме Tube, в форме добавления у меня всегда один и тот же токен (для сеанс), если я отредактирую трубку, это тот же знак, что и форма добавления, и то же самое для всех отредактированных труб. То же самое на моих ссылках удаления, которые вызывают действие контроллера, в котором я создаю форму с помощью кнопки 2 (Confirm d elete, Cancel), чтобы иметь CSRF-защиту с формой и подтверждением. В этом случае у меня есть тот же токен для всех ссылок на удаление, которые используют этот метод, потому что symfony создает токен _csrf/form в сеансе и повторно использует его. – mpiot
Цель CSRF (Cross-Site Request Forgery) заключается в том, чтобы предотвратить вредоносное веб-сайт для выполнения действий через аутентифицированный сеанс пользователя. IMHO вполне достаточно, чтобы иметь один токен для всех ваших ссылок, потому что больше токенов не улучшит безопасность ... –