Я программно развертывается конечной точки Java WebSocket (JSR356 3.1), и я хочу, чтобы проверить значение заголовка Origin
запроса в целях смягчения CSRF атак, и принимать только запросы, рукопожатия которых Host
и Origin
значения заголовка совпадают.Origin проверка в Java-сокетов, чтобы предотвратить CSRF
Мне кажется, что путь является переопределение метода:
ServerEndpointConfig.Configurator.checkOrigin(String originHeaderValue)
(реализации предоставленной Tomcat 8 всегда возвращает true
), но проблема, которую я вижу, что этот метод имеет только один параметр, и я пропускаю значение заголовка хоста, чтобы сравнить это значение с.
Также этот класс не предлагает какой-либо метод, возвращающий эту информацию, поэтому я считаю этот метод бесполезным, если вы не сравниваете значение заголовка источника с ранее известным значением хоста или набором значений, но это не имеет так как мое приложение можно увидеть под разными, изменяя имена узлов или IP-адреса.
Я рассматриваю возможность выполнения этой проверки внутри реализации modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response)
, где я могу читать все значения заголовка, но я уверен, что я что-то недопонимаю.
Так что мой вопрос:
Что такое правильный способ выполнения этой проверки?
Спасибо, Него
да это не кажется правильным; API должен был предоставить приложению возможность отклонить или принять рукопожатие. – ZhongYu
Спасибо @ bayou.io, я боюсь. Я просто отметил вопрос «tyrus», надеясь, что эксперт JSR сможет его прочитать. – idelvall