17.8. フィルターの設定
フィルターはリクエストの一部の変更を可能にし、述語を使用してフィルターの実行時を制御できます。フィルターの一般的なユースケースには、ヘッダーの設定や GZIP 圧縮などがあります。
フィルターの機能は、JBoss EAP 6 で使用されたグローバルバルブと同等です。
以下のタイプのフィルターを定義できます。
- custom-filter
- error-page
- expression-filter
- gzip
- mod-cluster
- request-limit
- response-header
- rewrite
以下の例は、管理 CLI を使用してフィルターを設定する方法を示しています。管理コンソールを使用してフィルターを設定する場合は、Configuration → Subsystems → Web (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
サブシステムで
を使用して Cookie の SameSite 属性を設定できます。この設定では、アプリケーションコードを変更する必要はありません。
SameSite
CookieHandler
以下の表に、SameSiteCookieHandler
パラメーターの詳細を示します。
表17.4 SameSiteCookieHandler parameters
パラメーター名 | 存在 | 説明 |
---|---|---|
| オプション |
|
| オプション |
このパラメーターは、 |
| オプション |
このパラメーターは、cookie 名の正規表現パターンを受け入れます。このパラメーターを指定しないと、属性 |
| オプション |
このパラメーターは、クライアントアプリケーションが
このデフォルト値を使用して、
互換性のないクライアントでの問題を回避するために、このパラメーターでは、 |
| 必須 |
このパラメーターは、
クロスサイトリクエストフォージェリー攻撃に対するセキュリティーを向上させるために、一部のブラウザーはデフォルトの |
SameSiteCookieHandler
は、SameSite= <specified-mode> 属性を、
に一致する Cookie、または cookie パターンが指定されていない場合のすべての Cookie に追加します。cookie-
patternSameSite= <specified-mode
> 属性には、ユーザー置換変数、つまり < specified-mode> が含まれます
。cookie-pattern
は、大文字と小文字を 区別する場合に設定される値に基づいて照合さ
れます。
任意のブラウザーに SameSite
属性を設定する前に、以下の点を考慮してください。
-
アプリケーションを確認し、Cookie が
SameSite
属性を必要とするかどうかを特定します。また、これらの Cookie のセキュリティーを保護する必要があります。 -
すべての cookie の
SameSite
属性モードをNone
に設定すると、アプリケーションが攻撃の影響を受けやすくなります。
expression-filter を使用して SameSiteCookieHandler を設定する手順
expression-filter
を使用してサーバー上で SameSiteCookieHandler
を設定するには、次の手順を実行します。
以下のコマンドを使用して、
SameSiteCookieHandler
で新しいexpression-filter
を作成します。/subsystem=undertow/configuration=filter/expression-filter=addSameSiteLax:add(expression="path-prefix('/mypathprefix') -> samesite-cookie(Lax)")
以下のコマンドを使用して、
undertow
Web サーバーでexpression-filter
を有効にします。/subsystem=undertow/server=default-server/host=default-host/filter-ref=addSameSiteLax:add
設定ファイルを追加して SameSiteCookieHandler を設定する手順
undertow-handlers.conf
ファイルを追加してアプリケーションに SameSiteCookieHandler
を設定するには、以下の手順を実行します。
-
undertow-handlers.conf
ファイルを WAR の WEB-INF ディレクトリーに追加します。 undertow-handlers.conf
ファイルで、特定のSameSiteCookieHandler
パラメーターで以下のコマンドを追加します。samesite-cookie(mode=<mode>)
mode
パラメーターの有効な値は、Strict
、Lax
、またはNone
です。上記のコマンドを使用すると、cookie-pattern
、大文字と小文字を区別する、
などの他のenable-client-checker
、またはadd-
secure-for-noneSameSiteCookieHandler
パラメーターを設定することもできます。