回答:
HTTP referer
ヘッダーで使用できます。次のようにしてサーブレットで取得できます。
String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.
ただし、これはクライアントが制御する値であるため、まったく異なるものになりすまされたり、削除されたりする可能性があることを理解する必要があります。したがって、それが返す値が何であれ、バックエンドの重要なビジネスプロセスではなく、プレゼンテーションコントロール(特定の純粋なレイアウトパーツの非表示/表示/変更など)および/または統計にのみ使用する必要があります。
興味のある方のために、スペルミスの背景はWikipediaにあります。
null
。
実際、それは次のとおりです:
request.getHeader("Referer")
、またはさらに良い、そして100%確実にする
request.getHeader(HttpHeaders.REFERER)
ために、HttpHeadersはcom.google.common.net.HttpHeaders
getHeader(String name)
(引用)のJava EE APIドキュメントから:"The header name is case insensitive."
org.apache.http.HttpHeaders
すべてが述べたように
request.getHeader("referer");
受け入れられた回答とは対照的に、refererヘッダーのセキュリティの側面についてもう少し詳しく説明したいと思います。Open Web Application Security Project(OWASP)のチートシートでは、クロスサイトリクエストフォージェリ(CSRF)防止用のチートシートで、リファラーヘッダーの重要性について言及しています。
さらに重要なのは、この推奨される同一オリジンチェックでは、「禁止」ヘッダーリストにあるため、JavaScriptで設定できないHTTPリクエストヘッダーがいくつかあります。これらのヘッダーの値を設定できるのはブラウザー自体だけであり、XSSの脆弱性を使用してもヘッダーを変更できないため、ブラウザーの信頼性が高まります。
ここで推奨されているソースオリジンチェックは、これらの保護されたヘッダーのうち3つ(オリジン、リファラー、ホスト)に依存しているため、それ自体が非常に強力なCSRF防御になります。
Forbiddenヘッダーリストはここで参照できます。ユーザーエージェント(ブラウザ)は、ユーザーではなく、これらのヘッダーを完全に制御します。