Я программно развертываю конечную точку Java Websocket (JSR356 3.1) и хочу, чтобы она проверяла значение заголовка запроса Origin
, чтобы смягчить атаки CSRF, и принимала только запросы рукопожатия, чьи значения заголовков Host
и Origin
совпадают.
Мне кажется, что путь - переопределить метод:
ServerEndpointConfig.Configurator.checkOrigin(String originHeaderValue)
< /а>
(реализация, предоставляемая Tomcat 8, всегда возвращает true
), но проблема, которую я вижу, заключается в том, что этот метод имеет только один параметр, и мне не хватает значения заголовка хоста для сравнения этого значения.
Кроме того, этот класс не предлагает никакого метода, возвращающего эту информацию, поэтому я считаю этот метод бесполезным, если только вы не сравниваете значение заголовка источника с ранее известным значением хоста или набором значений, но это также не имеет никакого смысла, поскольку мое приложение можно было увидеть под разными, изменяющимися именами хостов или IP-адресами.
Я рассматриваю возможность выполнения этой проверки внутри реализации modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response)
, где я могу прочитать все значения заголовков, но я почти уверен, что что-то неправильно понимаю.
Итак, мой вопрос:
Каков правильный способ выполнить эту проверку?
Спасибо, Начо
tyrus
, надеясь, что эксперт JSR сможет его прочитать. - person idelvall   schedule 15.02.2016