クラス StrictHttpFirewall

java.lang.ObjectSE
org.springframework.security.web.firewall.StrictHttpFirewall
実装されたすべてのインターフェース:
HttpFirewall

public class StrictHttpFirewall extends ObjectSE implements HttpFirewall

RequestRejectedException で不審なリクエストを拒否する HttpFirewall の厳密な実装。

次のルールがファイアウォールに適用されます。

  • 許可されていない HTTP メソッドを拒否します。これは HTTP 動詞の改ざんと XST 攻撃をブロックするように指定されています。setAllowedHttpMethods(Collection) を参照
  • セキュリティの制約を回避するために、正規化されていない URL を拒否します。この制約を無効にすることは非常に危険であると考えられるため、これを無効にする方法はありません。この動作を許可するいくつかのオプションは、ファイアウォールの前にリクエストを正規化するか、代わりに DefaultHttpFirewall を使用することです。リクエストの正規化は脆弱であり、リクエストが正規化ではなく拒否される理由に留意してください。
  • 出力可能な ASCII 文字ではない文字を含む URL を拒否します。この制約を無効にすることは非常に危険であると考えられるため、これを無効にする方法はありません。
  • セミコロンを含む URL を拒否します。setAllowSemicolon(boolean) を参照
  • URL エンコードされたスラッシュを含む URL を拒否します。setAllowUrlEncodedSlash(boolean) を参照
  • バックスラッシュを含む URL を拒否します。setAllowBackSlash(boolean) を参照
  • null 文字を含む URL を拒否します。setAllowNull(boolean) を参照
  • URL エンコードパーセントを含む URL を拒否します。setAllowUrlEncodedPercent(boolean) を参照
  • 許可されていないホストを拒否します。setAllowedHostnames(Predicate) を参照
  • 許可されていないヘッダー名を拒否します。setAllowedHeaderNames(Predicate) を参照
  • 許可されていないヘッダー値を拒否します。setAllowedHeaderValues(Predicate) を参照
  • 許可されていないパラメーター名を拒否します。setAllowedParameterNames(Predicate) を参照
  • 許可されていないパラメーター値を拒否します。setAllowedParameterValues(Predicate) を参照
導入:
4.2.4
関連事項:
  • コンストラクターの詳細

    • StrictHttpFirewall

      public StrictHttpFirewall()
  • メソッドの詳細

    • setUnsafeAllowAnyHttpMethod

      public void setUnsafeAllowAnyHttpMethod(boolean unsafeAllowAnyHttpMethod)
      HTTP メソッドが許可されるかどうかを設定します。これが true に設定されている場合、HTTP メソッドの検証は実行されません。これにより、HTTP 動詞の改ざんと XST 攻撃までアプリケーションを開くことができます
      パラメーター:
      unsafeAllowAnyHttpMethod - true の場合、HTTP メソッド検証を無効にします。それ以外の場合は、デフォルトにリセットします。デフォルトは false です。
      導入:
      5.1
      関連事項:
    • setAllowedHttpMethods

      public void setAllowedHttpMethods(CollectionSE<StringSE> allowedHttpMethods)

      許可する HTTP メソッドを決定します。デフォルトでは、"DELETE"、"GET"、"HEAD"、"OPTIONS"、"PATCH"、"POST"、"PUT" が許可されます。

      パラメーター:
      allowedHttpMethods - 許可される HTTP メソッドの大文字と小文字を区別するコレクション。
      導入:
      5.1
      関連事項:
    • setAllowSemicolon

      public void setAllowSemicolon(boolean allowSemicolon)

      URL でセミコロンを許可するかどうかを決定します(つまり、マトリックス変数)。反映されたファイルダウンロード攻撃を実行しようとする一般的な方法であるため、デフォルトではこの動作を無効にします。また、URL ベースのセキュリティをバイパスする多くのエクスプロイトのソースです。

      例: 次の CVE は、CVE につながったセミコロンの処理方法に関するサーブレット仕様のあいまいさに関する課題のサブセットです。

      セミコロンを許可する場合は、セキュリティバイパスの非常に一般的なソースであるため、再考してください。ユーザーがセミコロンを必要とするいくつかの一般的な理由と代替が以下にリストされています

      • パスに JSESSIONID を含める -URL にセッション ID(または機密情報)を含めないでください。漏れが発生する可能性があります。代わりに Cookie を使用します。
      • 行列変数 - マトリックス変数を活用したいユーザーは、代わりに HTTP パラメーターの使用を検討する必要があります。
      パラメーター:
      allowSemicolon - URL にセミコロンを許可する必要があります。デフォルトは false
    • setAllowUrlEncodedSlash

      public void setAllowUrlEncodedSlash(boolean allowUrlEncodedSlash)

      URL エンコードされた "%2F" であるスラッシュ "/" をパスで許可するかどうかを決定します。URL ベースのセキュリティを回避する一般的な方法であるため、デフォルトではこの動作を許可しません。

      例: サーブレット仕様のあいまいさが原因で、値が一貫して解析されず、HttpServletRequest パス関連の値が異なる値になり、特定のセキュリティ制約をバイパスできます。

      パラメーター:
      allowUrlEncodedSlash - URL エンコードされた "%2F" であるスラッシュ "/" がパスで許可されるかどうか。デフォルトは false です。
    • setAllowUrlEncodedDoubleSlash

      public void setAllowUrlEncodedDoubleSlash(boolean allowUrlEncodedDoubleSlash)

      URL エンコードされた "%2F%2F" であるダブルスラッシュ "//" をパスで許可するかどうかを決定します。デフォルトでは許可しません。

      パラメーター:
      allowUrlEncodedDoubleSlash - パスで URL エンコードされた "%2F%2F" であるスラッシュ "//" が許可されているかどうか。デフォルトは false です。
    • setAllowUrlEncodedPeriod

      public void setAllowUrlEncodedPeriod(boolean allowUrlEncodedPeriod)

      期間 "." かどうかを決定します。つまり、URL エンコードされた "%2E" はパスで許可されるかどうかです。デフォルトでは、セキュリティの悪用の頻繁なソースであるため、この動作を許可しません。

      例: サーブレット仕様のあいまいさが原因で、URL エンコードされた期間がディレクトリトラバーサル攻撃を介してセキュリティ制約をバイパスする可能性があります。これは、パスが一貫して解析されないため、特定のセキュリティ制約をバイパスできるように、HttpServletRequest パス関連の値に異なる値が生じるためです。

      パラメーター:
      allowUrlEncodedPeriod - ピリオド "." つまり、"%2E" でエンコードされた URL がパスで許可されているかどうかを確認します。デフォルトは false です。
    • setAllowBackSlash

      public void setAllowBackSlash(boolean allowBackSlash)

      バックスラッシュ "\" または URL エンコードされたバックスラッシュ "%5C" をパスで許可するかどうかを決定します。デフォルトでは、セキュリティの悪用の頻繁な原因であるため、この動作は許可されていません。

      例: サーブレット仕様のあいまいさが原因で、URL エンコードされた期間がディレクトリトラバーサル攻撃を介してセキュリティ制約をバイパスする可能性があります。これは、パスが一貫して解析されないため、特定のセキュリティ制約をバイパスできるように、HttpServletRequest パス関連の値に異なる値が生じるためです。

      パラメーター:
      allowBackSlash - パスでは、円記号 "\" または URL エンコードされた円記号 "%5C" を使用できます。デフォルトは false です
    • setAllowNull

      public void setAllowNull(boolean allowNull)

      null "\ 0" または URL エンコードされた nul "%00" をパスで許可するかどうかを決定します。デフォルトでは、セキュリティの悪用の頻繁な原因であるため、この動作は許可されていません。

      パラメーター:
      allowNull - パスに null "\ 0" または URL エンコードされた null "%00" を許可するかどうか。デフォルトは false です
      導入:
      5.4
    • setAllowUrlEncodedPercent

      public void setAllowUrlEncodedPercent(boolean allowUrlEncodedPercent)

      URL エンコードされた "%25" であるパーセント "%" をパスで許可するかどうかを決定します。デフォルトでは、セキュリティの悪用の頻繁な原因であるため、この動作は許可されていません。

      例: これは、セキュリティ制約の回避につながる二重の URL エンコーディングを伴う悪用につながる可能性があります。

      パラメーター:
      allowUrlEncodedPercent - URL エンコードされた "%25" であるパーセント "%" をパスで許可する必要があるかどうか。デフォルトは false です
    • setAllowUrlEncodedCarriageReturn

      public void setAllowUrlEncodedCarriageReturn(boolean allowUrlEncodedCarriageReturn)
      URL エンコードされたキャリッジリターンがパスで許可されるかどうかを決定します。これはセキュリティエクスプロイトの頻繁な発生源であるため、デフォルトではこの動作を許可していません。
      パラメーター:
      allowUrlEncodedCarriageReturn - URL エンコードされたキャリッジリターンが URL で許可されているかどうか。デフォルトは false です。
    • setAllowUrlEncodedLineFeed

      public void setAllowUrlEncodedLineFeed(boolean allowUrlEncodedLineFeed)
      パスで URL エンコードされたラインフィードを許可するかどうかを決定します。これはセキュリティエクスプロイトの頻繁な発生源であるため、デフォルトではこの動作を許可していません。
      パラメーター:
      allowUrlEncodedLineFeed - URL エンコードされたラインフィードが URL で許可されているかどうか。デフォルトは false です。
    • setAllowUrlEncodedParagraphSeparator

      public void setAllowUrlEncodedParagraphSeparator(boolean allowUrlEncodedParagraphSeparator)
      URL エンコードされた段落区切り文字をパスで許可するかどうかを決定します。これはセキュリティエクスプロイトの頻繁な発生源であるため、デフォルトではこの動作を許可していません。
      パラメーター:
      allowUrlEncodedParagraphSeparator - URL エンコードされた段落区切り文字が URL で許可されているかどうか。デフォルトは false です。
    • setAllowUrlEncodedLineSeparator

      public void setAllowUrlEncodedLineSeparator(boolean allowUrlEncodedLineSeparator)
      パスで URL エンコードされた行セパレーターを許可するかどうかを決定します。これはセキュリティエクスプロイトの頻繁な発生源であるため、デフォルトではこの動作を許可していません。
      パラメーター:
      allowUrlEncodedLineSeparator - URL でエンコードされた行セパレーターが URL で許可されているかどうか。デフォルトは false です。
    • setAllowedHeaderNames

      public void setAllowedHeaderNames(PredicateSE<StringSE> allowedHeaderNames)

      許可するヘッダー名を決定します。デフォルトでは、ISO 制御文字および定義されていない文字を含むヘッダー名は拒否されます。

      パラメーター:
      allowedHeaderNames - ヘッダー名をテストするための述語
      導入:
      5.4
      関連事項:
    • setAllowedHeaderValues

      public void setAllowedHeaderValues(PredicateSE<StringSE> allowedHeaderValues)

      許可するヘッダー値を決定します。デフォルトでは、ISO 制御文字と定義されていない文字を含むヘッダー値を拒否します。

      パラメーター:
      allowedHeaderValues - ホスト名をテストするための述語
      導入:
      5.4
      関連事項:
    • setAllowedParameterNames

      public void setAllowedParameterNames(PredicateSE<StringSE> allowedParameterNames)
      許可するパラメーター名を決定します。デフォルトでは、ISO 制御文字および定義されていない文字を含むヘッダー名は拒否されます。
      パラメーター:
      allowedParameterNames - パラメーター名をテストするための述語
      導入:
      5.4
      関連事項:
    • setAllowedParameterValues

      public void setAllowedParameterValues(PredicateSE<StringSE> allowedParameterValues)

      許可するパラメーター値を決定します。デフォルトでは、すべてのパラメーター値が許可されます。

      パラメーター:
      allowedParameterValues - パラメーター値をテストするための述語
      導入:
      5.4
    • setAllowedHostnames

      public void setAllowedHostnames(PredicateSE<StringSE> allowedHostnames)

      許可するホスト名を決定します。デフォルトでは、任意のホスト名を許可します。

      パラメーター:
      allowedHostnames - ホスト名をテストするための述語
      導入:
      5.2
    • getFirewalledRequest

      public FirewalledRequest getFirewalledRequest(jakarta.servlet.http.HttpServletRequest request) throws RequestRejectedException
      インターフェースからコピーされた説明: HttpFirewall
      フィルターチェーンを通過するリクエストオブジェクトを提供します。
      次で指定:
      インターフェース HttpFirewallgetFirewalledRequest 
      例外:
      RequestRejectedException - リクエストをすぐに拒否する必要がある場合
    • getFirewalledResponse

      public jakarta.servlet.http.HttpServletResponse getFirewalledResponse(jakarta.servlet.http.HttpServletResponse response)
      インターフェースからコピーされた説明: HttpFirewall
      フィルターチェーンを通過するレスポンスを提供します。
      次で指定:
      インターフェース HttpFirewallgetFirewalledResponse 
      パラメーター:
      response - 元のレスポンス
      戻り値:
      元のレスポンスまたは置換 / ラッパーのいずれか。
    • getEncodedUrlBlocklist

      public SetSE<StringSE> getEncodedUrlBlocklist()
      からエントリを追加 / 削除できる既存のエンコードされた URL ブロックリストを提供します
      戻り値:
      既存のエンコードされた URL ブロックリスト、決して null
    • getDecodedUrlBlocklist

      public SetSE<StringSE> getDecodedUrlBlocklist()
      エントリを追加 / 削除できる既存のデコードされた URL ブロックリストを提供します
      戻り値:
      既存のデコードされた url ブロックリスト。null にはならない
    • getEncodedUrlBlacklist

      @DeprecatedSE public SetSE<StringSE> getEncodedUrlBlacklist()
      使用すべきではありません。
      代わりに getEncodedUrlBlocklist() を使用してください
      からエントリを追加 / 削除できる既存のエンコードされた URL ブロックリストを提供します
      戻り値:
      既存のエンコードされた URL ブロックリスト、決して null
    • getDecodedUrlBlacklist

      public SetSE<StringSE> getDecodedUrlBlacklist()
      エントリを追加 / 削除できる既存のデコードされた URL ブロックリストを提供します
      戻り値:
      既存のデコードされた url ブロックリスト。null にはならない