Подтвердить что ты не робот

Spring 3.1 MVC, Spring Безопасность 3.1 - токен CSRF

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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


Для Spring Безопасность <= 3.1:

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

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

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

EDIT (апрель 2012 г.): моя реализация работает с Spring 3.0, если вы используете Spring 3.1, а затем посмотрите ответ Эяля Лупу и его Blog он использует некоторые функции Spring 3.1, поэтому обработка фильтра проще.

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

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

JSP (х):

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>