Spring Boot: RequestRejectedException: запрос был отклонен, поскольку URL-адрес содержал потенциально вредоносную строку ";" - PullRequest
0 голосов
/ 29 сентября 2018

При получении POST учетных данных для входа в приложение Spring Boot я получаю следующее исключение:

org.springframework.security.web.firewall.RequestRejectedException: запрос был отклонен, поскольку URL-адрес содержалпотенциально вредоносная строка ";"

Публикуется на /dologin, а затем перенаправляется на /home с добавлением jsessionid в конце.Он также устанавливает cookie сессии.Я не изменил никаких настроек сеанса, и в 1011 * нет упоминания session.

Я пытался установить

server.servlet.session.cookie.http-only=true
server.servlet.session.tracking-modes=cookie

Как упоминалось в https://stackoverflow.com/a/31792535/148844,, но это не сработало.

Я добавил

@Bean
public ServletContextInitializer servletContextInitializer() {
    return new ServletContextInitializer() {
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
           servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE));
           SessionCookieConfig sessionCookieConfig=servletContext.getSessionCookieConfig();
           sessionCookieConfig.setHttpOnly(true);
        }
    };
}

Но теперь он просто POSTs, устанавливает cookie и перенаправляет обратно на экран входа в систему.Как будто он не может получить доступ к сеансу.

Я установил server.session.tracking-modes=cookie (вместо server.servlet...) и теперь он использует только куки, но браузер Chrome не отправляет куки обратно на серверпосле входа в систему!/home Действие отобразит страницу входа только в том случае, если атрибут user в сеансе имеет значение null.

POST /dologin HTTP/1.1
Host: localhost:8080
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
Referer: http://localhost:8080/home

HTTP/1.1 302
Set-Cookie: JSESSIONID=3B82AAA40CE94FF490FBF7B4DBD837DD; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Location: http://localhost:8080/home

GET /home HTTP/1.1
Host: localhost:8080
Upgrade-Insecure-Requests: 1
Referer: http://localhost:8080/home

HTTP/1.1 200
Set-Cookie: JSESSIONID=B60BF649068F7E85346691FD2F5D119B; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: text/html;charset=UTF-8
Content-Language: en-US
Content-Length: 2742
Date: Sat, 29 Sep 2018 17:41:55 GMT

Обратите внимание, что файлы cookie отличаются, и Chrome не отправил файл cookie на сервер?Почему?

Spring Boot 1.5.13, версия Chrome 69.0.3497.100 (официальная сборка) (64-разрядная версия)

1 Ответ

0 голосов
/ 29 сентября 2018

ОК, изменив server.servlet.session.cookie.http-only=true на server.session.tracking-modes=cookie и изменив http://localhost:8080 на http://127.0.0.1:8080/, сработало.Я нашел этот ответ:

Chrome localhost cookie не задан

Кажется, что Chrome переворачивает с localhost на запрет localhost.Это работало около месяца или три назад.localhost работает для приложения Rails, а Chrome отправляет файлы cookie.

Фактически, Chrome также отправляет файл cookie _mt_rails_session Rails для localhost в приложение Spring Boot, но не файл cookie JSESSIONID.

Я подозреваю, но не подтвердил, что это может быть связано с настройкой HTTPS на порте 8080 для несвязанного приложения 3-й Spring Boot, а также может быть некоторая настройка HSTS, кэшированная во внутреннем устройстве Chrome.Это, вероятно, ошибка в Chrome.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...