17.8. フィルターの設定

フィルターはリクエストの一部の変更を可能にし、述語を使用してフィルターの実行時を制御できます。フィルターの一般的なユースケースには、ヘッダーの設定や GZIP 圧縮などがあります。

注記

フィルターの機能は、JBoss EAP 6 で使用されたグローバルバルブと同等です。

以下のタイプのフィルターを定義できます。

  • custom-filter
  • error-page
  • expression-filter
  • gzip
  • mod-cluster
  • request-limit
  • response-header
  • rewrite

以下の例は、管理 CLI を使用してフィルターを設定する方法を示しています。管理コンソールを使用してフィルターを設定する場合は、ConfigurationSubsystemsWeb (Undertow)Filters と選択します。

既存のフィルターの更新

既存のフィルターを更新するには、以下を指定します。

/subsystem=undertow/configuration=filter/response-header=myHeader:write-attribute(name=header-value,value="JBoss-EAP")
reload

新規のフィルターの作成

新規のフィルターを作成するには、以下を指定します。

/subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")

フィルターの削除

フィルターを削除するには、以下を指定します。

/subsystem=undertow/configuration=filter/response-header=new-response-header:remove
reload

フィルターの設定に使用できる属性の完全リストは Undertow サブシステムの属性 の項を参照してください。

17.8.1. buffer-request ハンドラーの設定

クライアントまたはブラウザーからのリクエストは、ヘッダーとボディーの 2 つで設定されます。通常の場合、ヘッダーとボディーの間に遅延がない状態で JBoss EAP に送信されます。しかし、ヘッダーが最初に送信され、その数秒後にボディーが送信されると、完全なリクエストの送信に遅延が発生します。このような場合、JBoss EAP にスレッドが作成され、完全なリクエストの実行を待機していることを示す waiting が表示されます。

リクエストのヘッダーおよびボティーの送信による遅延は、buffer-request ハンドラーを使用して修正できます。buffer-request ハンドラーは、ワーカースレッドに割り当てする前に、非ブロッキング IO スレッドからリクエストの消費を試みます。追加された buffer-request ハンドラーがない場合、スレッドは直接ワーカースレッドに割り当てられます。しかし、buffer-request ハンドラーが追加されると、ワーカースレッドに割り当てする前に、ハンドラーは IO スレッドを使用してブロックせずにバッファー処理できる量のデータを読み取ろうとします。

以下の管理 CLI コマンドを使用して buffer-request ハンドラーを設定できます。

/subsystem=undertow/configuration=filter/expression-filter=buf:add(expression="buffer-request(buffers=1)")

/subsystem=undertow/server=default-server/host=default-host/filter-ref=buf:add

処理できるバッファーリクエストのサイズには制限があります。この制限は、以下の式のとおり、バッファーサイズとバッファー合計数の組み合わせで決定されます。

Total_size = num_buffers × buffer_size

この式の説明は次のとおりです。

  • Total_size は、リクエストがワーカースレッドに送信される前にバッファー処理されるデータのサイズになります。
  • num_buffers はバッファーの数になります。バッファーの数は、ハンドラーの buffers パラメーターによって設定されます。
  • buffer_size は各バッファーのサイズになります。バッファーサイズは io サブシステムで設定され、デフォルトではリクエストごとに 16KB になります。
警告

メモリー不足になる可能性があるため、サイズが大きすぎるバッファーリクエストは設定しないでください。

17.8.2. SameSite 属性の設定

SameSite 属性を使用して、同じサイト内でクッキーにアクセスできるかどうかについてクッキーのアクセシビリティを定義します。この属性は、ブラウザーがクロスサイト要求で Cookie を送信しないため、クロスサイトフォージェリー攻撃を防ぎます。

undertow サブシステムで SameSite CookieHandler を使用して Cookie の SameSite 属性を設定できます。この設定では、アプリケーションコードを変更する必要はありません。

以下の表に、SameSiteCookieHandler パラメーターの詳細を示します。

表17.4 SameSiteCookieHandler parameters

パラメーター名存在説明

add-secure-for-none

オプション

SameSite 属性モードが None の場合、このパラメーターは Cookie に Secure 属性を追加します。デフォルト値は true です。

case-sensitive

オプション

このパラメーターは、cookie-pattern で大文字と小文字が区別されるかどうかを示します。デフォルト値は true です。

cookie-pattern

オプション

このパラメーターは、cookie 名の正規表現パターンを受け入れます。このパラメーターを指定しないと、属性 SameSite=<specified-mode > がすべての Cookie に追加されます。

enable-client-checker

オプション

このパラメーターは、クライアントアプリケーションが SameSite=None 属性と互換性がないかどうかを確認します。デフォルト値は true です。

このデフォルト値を使用して、SameSite 属性モードを None 以外の値に設定すると、パラメーターは検証を無視します。

互換性のないクライアントでの問題を回避するために、このパラメーターでは、SameSite 属性モードを None に設定せず、効果がありません。互換性のあるクライアントからのリクエストの場合、パラメーターは SameSite 属性モード None を期待どおりに適用します。

モード

必須

このパラメーターは、SameSite 属性モードを指定します。これは、SameSite 属性モードを指定します。これは、StrictLax または None に設定できます。

クロスサイトリクエストフォージェリー攻撃に対するセキュリティーを向上させるために、一部のブラウザーはデフォルトの SameSite 属性モードを Lax に設定します。詳細は、関連情報 セクションを 参照 してください。

SameSiteCookieHandler は、SameSite= <specified-mode> 属性を、cookie- pattern に一致する Cookie、または cookie パターンが指定されていない場合のすべての Cookie に追加します。SameSite= <specified-mode > 属性には、ユーザー置換変数、つまり < specified-mode> が含まれますcookie-pattern は、大文字と小文字を 区別する場合に設定される値に基づいて照合さ れます。

任意のブラウザーに SameSite 属性を設定する前に、以下の点を考慮してください。

  • アプリケーションを確認し、Cookie が SameSite 属性を必要とするかどうかを特定します。また、これらの Cookie のセキュリティーを保護する必要があります。
  • すべての cookie の SameSite 属性モードを None に設定すると、アプリケーションが攻撃の影響を受けやすくなります。

expression-filter を使用して SameSiteCookieHandler を設定する手順

expression-filter を使用してサーバー上で SameSiteCookieHandler を設定するには、次の手順を実行します。

  1. 以下のコマンドを使用して、SameSiteCookieHandler で新しい expression-filter を作成します。

    /subsystem=undertow/configuration=filter/expression-filter=addSameSiteLax:add(expression="path-prefix('/mypathprefix') -> samesite-cookie(Lax)")
  2. 以下のコマンドを使用して、undertow Web サーバーで expression-filter を有効にします。

    /subsystem=undertow/server=default-server/host=default-host/filter-ref=addSameSiteLax:add

設定ファイルを追加して SameSiteCookieHandler を設定する手順

undertow-handlers.conf ファイルを追加してアプリケーションに SameSiteCookieHandler を設定するには、以下の手順を実行します。

  1. undertow-handlers.conf ファイルを WAR の WEB-INF ディレクトリーに追加します。
  2. undertow-handlers.conf ファイルで、特定の SameSiteCookieHandler パラメーターで以下のコマンドを追加します。

    samesite-cookie(mode=<mode>)

    mode パラメーターの有効な値は、StrictLax、または None です。上記のコマンドを使用すると、cookie-pattern、大文字と小文字を区別する、enable-client-checker、または add- secure-for-none などの他の SameSiteCookieHandler パラメーターを設定することもできます。