Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Странное поведение обработчика CSRF токена. / 7 сообщений из 7, страница 1 из 1
18.01.2019, 14:46
    #39761515
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение обработчика CSRF токена.
Столкнулся с непонятным поведением обработчика токена безопасности CSRF.
А именно - если я добавляю на форму (method=POST)

Код: html
1.
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />


То при сабмите выдается ошибка
HTTP Status 403 – ForbiddenInvalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
Но если добавляю его в GET-параметр вызова,
Код: html
1.
<form action="/photo/upload?${_csrf.parameterName}=${_csrf.token}" method="POST" enctype="multipart/form-data">


то все работает нормально!

Контроллер обычный
Код: java
1.
2.
3.
4.
5.
    @RequestMapping(value = "/photo/upload", method = RequestMethod.POST)
    public ModelAndView photo(@RequestParam("file") MultipartFile file,
    HttpServletRequest request) throws FileNotFoundException, IOException, SQLException {
...
}



Оно конечно можно и так оставить, но хотелось бы ясности в данном вопросе.
...
Рейтинг: 0 / 0
18.01.2019, 14:47
    #39761516
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение обработчика CSRF токена.
Java Spring 4.0.1 + JDK1.8 + Tomcat 8.0.27
...
Рейтинг: 0 / 0
18.01.2019, 14:52
    #39761520
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение обработчика CSRF токена.
Ты всерьёз спрашиваешь "почему выдаётся ошибка отсутствия параметра в запросе, когда я не добавляю параметр в запрос" или просто не в курсе чем отличается GET от POST?
...
Рейтинг: 0 / 0
18.01.2019, 14:56
    #39761524
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение обработчика CSRF токена.
Dimitry SibiryakovТы всерьёз спрашиваешь "почему выдаётся ошибка отсутствия параметра в запросе, когда я не добавляю параметр в запрос

Вы утверждаете, что так нельзя задавать параметр?
Код: html
1.
2.
3.
4.
5.
6.
<form action="/photo/upload" method="POST" enctype="multipart/form-data">
   ...

   <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
   ...
</form>
...
Рейтинг: 0 / 0
18.01.2019, 15:22
    #39761546
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение обработчика CSRF токена.
SQL2008, https://docs.spring.io/spring-security/site/docs/4.0.x/reference/html/csrf.html

автор16.5.4 Multipart (file upload)
There are two options to using CSRF protection with multipart/form-data. Each option has its tradeoffs.

Placing MultipartFilter before Spring Security
Include CSRF token in action
[Note]
Before you integrate Spring Security’s CSRF protection with multipart file upload, ensure that you can upload without the CSRF protection first. More information about using multipart forms with Spring can be found within the 17.10 Spring’s multipart (file upload) support section of the Spring reference and the MultipartFilter javadoc.
...
Рейтинг: 0 / 0
18.01.2019, 15:30
    #39761560
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение обработчика CSRF токена.
Dimitry SibiryakovТы всерьёз спрашиваешь "почему выдаётся ошибка отсутствия параметра в запросе, когда я не добавляю параметр в запрос" или просто не в курсе чем отличается GET от POST?

а Дмитрий всерьез говорит,что реквест атрибут и реквест параметр надо отличать друг от друга. В случае мультипарт сообщения - в какую-часть мультипарта вы хотите засунуть токен? А именно это вы и делаете, когда объявляете токен в поле формы.
...
Рейтинг: 0 / 0
18.01.2019, 15:34
    #39761567
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение обработчика CSRF токена.
ОзверинDimitry SibiryakovТы всерьёз спрашиваешь "почему выдаётся ошибка отсутствия параметра в запросе, когда я не добавляю параметр в запрос" или просто не в курсе чем отличается GET от POST?

а Дмитрий всерьез говорит,что реквест атрибут и реквест параметр надо отличать друг от друга. В случае мультипарт сообщения - в какую-часть мультипарта вы хотите засунуть токен? А именно это вы и делаете, когда объявляете токен в поле формы.
Вы правы! В других случаях (не мультипарт) все работает нормально.
Спасибо за разъяснения!
А то всю голову сломал.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Странное поведение обработчика CSRF токена. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]