2016-11-29 14 views
0

Я пытаюсь лучше понять механизм работы Spring CSRF. Предположим, у меня есть сайт https://example.com/, где люди могут голосовать по кандидатам. Пользователи также могут обмениваться сообщениями. У меня также есть зарегистрированный пользователь, а другой пользователь, который отправляет ей сообщение с сообщением, чтобы нажать на ссылку https://example.com/vote/candiate/30.Spring CSRF сценарий защиты?

Если пользователь нажимает на эту ссылку, браузер не будет отправлять токен CSRF и идентификатор сеанса для зарегистрированного пользователя, тем самым минуя проверку защиты CSRF?

ответ

2

Причина a ссылка обычно не проблема в CSRF, так это то, что CSRF - это только проблема, когда запрос что-то меняет. Ссылка (запрос GET) не должна ничего менять. Если это так, как в вашем примере, это добавляет голосование кандидату, я полагаю, любая ссылка с внешнего источника (другой веб-сайт) также сможет использовать «нормальный» CSRF, просто связавшись с этим URL-адресом.

Проблема в том, что проблема не в том, что защита CSRF неадекватна весной, проблема в том, что голосование в этом случае является запросом GET, а GET обычно не защищаются от CSRF по дизайну. Решение состоит в том, чтобы изменить запрос голосования на POST, который затем будет защищен от CSRF (и который также будет более RESTful btw).

+0

Предположим, контроллер пружины реализует конечную точку, которая принимает запрос на отправку URL-адреса https://example.com/vote/candiate/30. Будет ли этот URL защищен CSRF? – Ole

+1

ОК - Думаю, я понял это сейчас. Браузер всегда выдаст запрос на получение, когда кто-то нажимает на ссылку, и пока я не реализую конечную точку контроллера, которая обновляет состояние, используя запросы на получение, все будет хорошо. – Ole

0

Основная идея: Когда запрос отправлен, сервер получил специальный файл cookie и ждет определенного значения в этом файле cookie. Если это значение будет отличаться, запрос должен завершиться неудачно. Итак, если служба возвращает форму для перемещения денежных средств между учетными записями, эта форма включает параметр, который ожидается получить при отправке формы, и если данные будут отправлены без этого параметра, запрос не будет завершен.

 Смежные вопросы

  • Нет связанных вопросов^_^