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 Безопасность)
Ответы
Ответ 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>
Ответ 3
С 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/