2012-02-15 8 views
17

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

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

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

+0

Вы правы, весна не имеет такой поддержки. Но в чем вопрос? – Ralph

+0

Хорошо. Вопросительный знак отсутствовал. Прости. Есть ли библиотека, которая охватывает как Spring Security + Spring MVC с защитой CSRF? Или это достаточно, чтобы покрыть Spring MVC, поскольку CSRF вреден только при аутентификации пользователя? –

ответ

23

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

8

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


Для Spring Security < = 3.1:

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

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

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

EDIT (апрель 2012): Моя реализация работает с Spring 3.0, если вы используете Spring 3.1, то есть смотреть на Eyal Lupu's answer и его 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> 
+0

Большое спасибо. –

+2

Обратите внимание, что в Spring 3.1 мы добавили интерфейс RequestDataValueProcessor. Вы можете реализовать его и настроить в контексте приложения, чтобы обновлять каждую форму, предполагая использование тегов формы Spring JSP. Мы сделали это, чтобы библиотека HDIV могла интегрироваться с Spring MVC, но она может быть использована кем угодно, конечно. –

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