Spring 3.1 MVC, Spring Security 3.1 - токен CSRF - PullRequest
17 голосов
/ 15 февраля 2012

В данный момент я ищу возможность включить токены CRSF в формы Spring MVC и Spring Security.Какое самое простое решение, которое охватывает оба сервлета (Spring Security + Spring MVC) и позволяет отображать и оценивать токены CSRF?

Я удивлен, что этот базовый механизм недоступен в стеке Springs.(который я считаю базовым для каждой платформы веб-приложений)

PS: я смотрел на HDIV, но не могу найти решение, чтобы использовать его и со Spring Security.(например, форма входа обрабатывается Spring MVC, а запрос входа обрабатывается Spring Security)

Ответы [ 3 ]

23 голосов
/ 14 апреля 2012

Spring 3.1 представил новый интерфейс с именем RequestDataValueProcessor. Используя этот интерфейс, вы можете легко (и автоматически - без каких-либо изменений вашего JSP или контроллеров!) Регистрировать токены CSRF в формах HTTP. Вы можете увидеть подробный пример в здесь , он также ссылается на пример кода на github (так что вы можете просто взять его оттуда и использовать в своем приложении).

8 голосов
/ 15 февраля 2012

ОБНОВЛЕНИЕ (январь 2014 г.): Spring Security 3.2 содержит реализацию CSRF-токена.


Для Spring Security <= 3.1: </p>

Поскольку CSRF имеетОтметим, что Spring Secruity (аутентификация и авторизация) могут быть реализованы отдельно друг от друга.

Существуют некоторые реализации CRSF, основанные на фильтрах.Например, один поставляется с Tomcat 7 и Tomcat 6.0.something

Когда я пытался их использовать (летом 2011 года), у меня не было ощущения, что он работает хорошо.Поэтому я реализовал свой собственный.

РЕДАКТИРОВАТЬ (апрель 2012 г.): Моя реализация работает с Spring 3.0, если вы используете Spring 3.1, взгляните на ответ Эяля Лупу иего блог использует некоторые функции Spring 3.1, поэтому работа с фильтрами более проста.

До сих пор я не обнародовал его (нет времени).Но ты будешь.Вы можете скачать его (это первый раз, когда я использую 4shared.com, я надеюсь, что это работает):

Недостаток моей реализации состоит в том, что вам необходимо добавить токен, явный для каждой формы, которая отправляет POST, DELETE, PUT.

JSP (x):

xmlns:crsf="http://www.humanfork.de/tags/de/humanfork/security/crsf"
...
<form ...>
   <crsf:hiddenCrsfNonce/>
   ....
</form>

web.xml

<filter>
    <filter-name>IdempotentCrsfPreventionFilter</filter-name>
    <filter-class>de.humanfork.security.crsf.IdempotentCsrfPreventionFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>IdempotentCrsfPreventionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
7 голосов
/ 11 сентября 2013

С Spring Security 3.2.0.RC1 поставляется функция защиты CSRF. Также есть решение для запросов AJAX.

См. http://www.springsource.org/node/22675 и http://spring.io/blog/2013/08/21/spring-security-3-2-0-rc1-highlights-csrf-protection/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...