2015-04-26 9 views
3

Я редактирую веб-страницу, созданную с использованием Apache Wicket. И мы хотим добавить некоторую защиту CSRF на веб-сайт. Желая, чтобы он был без гражданства, мы хотим использовать шаблон двойного представления.Добавить заголовок защиты CSRF для вызова ajax в wicket

Для форм мы, вероятно, закончим использование скрытого поля, которое будет содержать токен csrf.

Но мы также должны добавить это к некоторому запросу GET, сделанному с использованием AjaxFallbackLink, который также изменяет некоторые данные (я знаю, что он не должен этого делать, но я не могу его изменить в настоящее время). Для этого мы рассматриваем возможность размещения маркера CSRF в настраиваемом заголовке, который отправляется с запросом, но я не видел никакого способа подключиться к методу javascript, который использует калитка (у wicketAjaxGet, по-видимому, есть только функция предварительного условия и канальная функция). Есть ли какие-либо предложения о том, как я могу это сделать?

Или бы добавить токен к URL-адресу, чтобы быть хорошим вариантом? Каковы будут проблемы в этом случае, по сравнению с настройкой в ​​заголовке, если мы используем передачу https.

Или любые другие идеи о том, как мы могли бы добавить защиту CSRF для этих запросов AJAX GET?

ответ

2

Если вы используете компоненты Ajax, страница будет зависеть от состояния.

Если вы в порядке, чтобы иметь сеанс http, то самый простой способ - использовать CryptoMapper (обратите внимание: он имеет множество улучшений в Wicket 6.x!).

Если вы хотите, чтобы страница была безстоящей, вы должны использовать свой собственный токен - либо как заголовок запроса, либо параметр. Проверьте wicketstuff-stateless для компонентов Ajax без апатии и поведения.

+0

Как CryptoMapper поможет предотвратить атаки CSRF? Из того, что я видел, калитка добавляет к url ​​идентификатор сеанса (целое число, которое увеличивается на 1 для каждой запрошенной страницы), и я предполагаю, что он просто зашифрует этот URL. Разве злоумышленник не сможет «угадать» этот идентификатор сеанса и зашифровать его сам, чтобы атака работала? – redspider

+0

CryptoMapper может шифровать весь URL, а не только параметры запроса в строке запроса. Секретный ключ для шифрования зависит от пользователя (т. Е. За сеанс HTTP), чтобы злоумышленник не мог догадаться об этом. Убедитесь, что вы используете Wicket 1.5.13 из-за CVE-2014-7808. –

3

Вы можете использовать 6.x (и 7.x) CsrfPreventionRequestCycleListener который packaged with Wicket

Вы установите его в Init-метод вашего приложения:

@Override protected void init() { // ... getRequestCycleListeners().add(new CsrfPreventionRequestCycleListener()); // ... } Это будет проверять Origin заголовки во всех запросы, включая AJAX. Вам нужно будет настроить слушателя так, как вы хотите, чтобы он действовал, из которых вы хотите разрешить и т. Д.

+0

только из 6.20+, хотя вы извлекаете его из 6.20 и используете его в предыдущих версиях 6.X – tomerz

+0

Но вы не должны этого делать, скорее обновите до 6.24 или 6.25, если это доступно. В более поздних выпусках есть множество проблем безопасности. –

+0

@Martjin вы правы .... но иногда это не так просто обновить. У вас также есть exp с подключением к весенней безопасности 4? – tomerz

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