Java Websocket エンドポイント (JSR356 3.1) をプログラムでデプロイしていますがOrigin
、CSRF 攻撃を軽減するためにリクエスト ヘッダー値を検証し、ヘッダー値と一致するハンドシェイク リクエストのみを受け入れるようHost
にOrigin
したいと考えています。
進むべき道はメソッドをオーバーライドすることだと私には思えます:
ServerEndpointConfig.Configurator.checkOrigin(String originHeaderValue)
(Tomcat 8 によって提供される実装は常に を返しますtrue
)、しかし、私が見る問題は、このメソッドには 1 つのパラメーターしかなく、この値を比較するためのホスト ヘッダー値を見逃していることです。
また、このクラスはこの情報を返すメソッドを提供しないため、元のヘッダー値を以前に既知のホスト値または値のセットと比較しない限り、このメソッドは役に立たないと思いますが、これも意味がありません。私のアプリケーションは、ホスト名または IP が変化する別の場所で表示される可能性があります。
すべてのヘッダー値を読み取ることができる実装内でこの検証を実行することを検討していmodifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response)
ますが、何かを誤解していると確信しています。
だから私の質問は:
この検証を実行する適切な方法は何ですか?
ありがとう、ナチョ