文字列一致条件の使用
警告
AWS WAF Classic へのサポートは 2025 年 9 月 30 日に終了します。
注記
これは AWS WAF Classic ドキュメントです。2019 年 11 月より前に AWS WAF でルールやウェブ ACL などの AWS WAF リソースを作成し、それらをまだ最新バージョンに移行していない場合にのみ、このバージョンを使用する必要があります。Web ACL を移行するには、AWS WAF Classic リソースを AWS WAF に移行する を参照してください。
最新バージョンの AWS WAF については、「AWS WAF」を参照してください。
ウェブリクエストに表示される文字列に基づいてリクエストを許可またはブロックする場合は、文字列一致条件を作成します。文字列一致条件は、検索する文字列と、AWS WAF Classic で文字列を検査する先のウェブリクエスト部分 (指定されたヘッダーやクエリ文字列など) を識別します。後でウェブ ACL を作成するときに、文字列を含むリクエストを許可するかブロックするかを指定します。
文字列一致条件の作成
文字列一致条件を作成するときに、検索する文字列と AWS WAF Classic でその文字列を検査する先のウェブリクエスト部分 (URI やクエリ文字列など) を識別するフィルターを指定します。文字列一致条件には複数のフィルターを追加できます。文字列一致条件ごとに 1 つのフィルターを設定することもできます。2 つの設定間では AWS WAF Classic の動作が以下のように異なります。
文字列一致条件ごとに 1 つのフィルター - 個別の文字列一致条件をルールに追加し、そのルールをウェブ ACL に追加すると、ウェブリクエストがすべての条件に一致した場合に限り、AWS WAF Classic はこれらの条件に基づいてリクエストを許可またはブロックします。
例えば、2 つの条件を作成するとします。1 つの条件は、
User-Agent
ヘッダーに値BadBot
が含まれているウェブリクエストに一致します。もう 1 つの条件は、クエリ文字列に値BadParameter
が含まれているウェブリクエストに一致します。両方の条件を同じルールに追加して、そのルールをウェブ ACL に追加すると、両方の条件に値が含まれている場合に限り、AWS WAF Classic はリクエストを許可またはブロックします。文字列一致条件ごとに複数のフィルター - 複数のフィルターを含む文字列一致条件をルールに追加して、そのルールをウェブ ACL に追加すると、ウェブリクエストが文字列一致条件のいずれかのフィルターに一致するだけで、AWS WAF Classic はその条件に基づいてリクエストを許可またはブロックします。
条件を 1 つだけ作成して、その条件に前の例と同じ 2 つのフィルターを含めたとします。AWS WAFリクエストの
User-Agent
ヘッダーにBadBot
が含まれているか、またはクエリ文字列にBadParameter
が含まれているかのいずれかであれば、Classic はリクエストを許可またはブロックします。
注記
文字列一致条件をルールに追加するときに、条件の値と一致しないウェブリクエストを許可またはブロックするように AWS WAF Classic を設定することもできます。
文字列一致条件を作成するには
AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/
) を開きます。 ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。
ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。
[Create condition] (条件を作成) を選択します。
適用するフィルター設定を指定します。詳細については、「文字列一致条件の作成時または編集時に指定する値」を参照してください。
[Add filter] (フィルターを追加) を選択します。
別のフィルターを追加する場合は、ステップ 4〜5 を繰り返します。
フィルターの追加が終了したら、[Create] (作成) を選択します。
文字列一致条件の作成時または編集時に指定する値
文字列一致条件を作成または更新するときに、次の値を指定します。
- [Name] (名前)
文字列一致条件の名前を入力します。名前に使用できるのは英数字 (A~Z、a~z、0~9) または特殊文字 _-!"#`+*},./ です。一度作成した条件の名前は変更できません。
- [Type] (タイプ)
[String match] (文字列の一致) を選択します。
- [Part of the request to filter on] (フィルタリングするリクエストの一部)
[Value to match] (一致する値) で指定した文字列を AWS WAF Classic で検査する各ウェブリクエスト内の部分を選択します。
- [Header] (ヘッダー)
指定したリクエストヘッダー (
User-Agent
やReferer
など)。[Header] (ヘッダー) を選択した場合は、[Header] (ヘッダー) フィールドにヘッダー名を指定します。- [HTTP method] (HTTP メソッド)
リクエストがオリジンに実行を要求しているオペレーションのタイプを示す HTTP メソッド。CloudFront がサポートしているメソッドは、
DELETE
、GET
、HEAD
、OPTIONS
、PATCH
、POST
、およびPUT
です。- [Query string] (クエリ文字列)
URL 内で
?
文字の後に続く部分 (ある場合)。- [URI]
リクエストの URI パス。リソースを識別します (例:
/images/daily-ad.jpg
)。これには、URI のクエリ文字列またはフラグメントコンポーネントは含まれません。詳細については、「Uniform Resource Identifier (URI): 一般的な構文」を参照してください。 [Transformation] (変換) が指定されていない場合、URI は正規化されず、AWS がリクエストの一部としてクライアントから受信するときに検査します。[Transformation] (変換) が指定されている場合、URI はその指定に従って形式が再設定されます。
- [Body] (本文)
リクエスト内で、HTTP リクエストの本文としてウェブサーバーに送信する追加データ (フォームのデータなど) を含む部分。
注記
[Part of the request to filter on] (フィルタリングするリクエストの一部) の値として [Body] (本文) を選択した場合、AWS WAF Classic によって最初の 8,192 バイト (8 KB) のみが検査されます。本文が 8,192 バイトより長いリクエストを許可またはブロックするには、サイズ制約条件を作成します。(AWS WAF Classic はリクエストのヘッダーから本文の長さを取得します)。詳細については、「サイズ制約条件の使用」を参照してください。
- [Single query parameter (value only)] (単一クエリパラメータ (値のみ))
クエリ文字列の一部として定義されているすべてのパラメータです。例えば、URL が「www.xyz.com?UserName=abc&SalesRegion=seattle」である場合、UserName または SalesRegion パラメータにフィルターを追加できます。
重複したパラメータがクエリ文字列に記述される場合、値は「OR」として評価されます。つまり、いずれかの値によって一致がトリガーされます。例えば、「www.xyz.com?SalesRegion=boston&SalesRegion=seattle」という URL では、[Value to match] (一致する値) に「boston」または「seattle」を指定すると、一致がトリガーされます。
[Single query parameter (value only)] (単一クエリパラメータ (値のみ)) を選択する場合は、[Query parameter name] (クエリパラメータ名) も指定します。これは検査するクエリ文字列のパラメータです (UserName や SalesRegion など)。[Query parameter name] (クエリパラメータ名) の最大長は 30 文字です。[Query parameter name] (クエリパラメータ名) では、大文字と小文字は区別されません。例えば、UserName を [Query parameter name] (クエリパラメータ名) として指定すると、username や UsERName など UserName のすべてのバリエーションに一致します。
- [All query parameters (values only)] (すべてのクエリパラメータ (値のみ))
[Single query parameter (value only)] (単一クエリパラメータ (値のみ)) に似ていますが、単一のパラメータの値を検査するのではなく、クエリ文字列内のすべてのパラメータの値が AWS WAF Classic によって [Value to match] (一致する値) を検査されます。例えば、URL が「www.xyz.com?UserName=abc&SalesRegion=seattle」の場合、[All query parameters (values only)] (すべてのクエリパラメータ (値のみ)) を選択すると、UserName または SalesRegion のいずれかの値が [Value to match] (一致する値) として指定されている場合、AWS WAF Classic によって一致がトリガーされます。
- [Header] (ヘッダー) ([Part of the request to filter on] (フィルタリングするリクエストの一部) が [Header] (ヘッダー) の場合のみ)
[Part of the request to filter on] (フィルタリングするリクエストの一部) として [Header] (ヘッダー) を選択した場合は、一般的なヘッダーのリストからヘッダーを選択するか、AWS WAF Classic で悪意のあるスクリプトを検査するヘッダー名を入力します。
- [Match type] (一致タイプ)
AWS WAF Classic で検査するリクエスト部分で、このフィルターに一致する [Value to match] (一致する値) の文字列が表示される箇所を選択します。
- [Contains] (次を含む)
文字列は、指定したリクエスト部分内の任意の場所に表示されます。
- [Contains word] (単語を含む)
指定したウェブリクエスト部分には [Value to match] (一致する値) が含まれていること、[Value to match] (一致する値) には英数字または下線 (A〜Z、a〜z、0〜9、_) のみが含まれていることが必要です。さらに、[Value to match] (一致する値) は単語であること、つまり、次のいずれかであることが必要です。
[Value to match] (一致する値) は、指定したウェブリクエスト部分 (ヘッダーの値など) の値と正確に一致する。
[Value to match] (一致する値) は、指定したウェブリクエスト部分の先頭にあり、英数字または下線 (_) 以外の文字が続く (例:
BadBot;
)。[Value to match] (一致する値) は、指定したウェブリクエスト部分の末尾にあり、英数字または下線 (_) 以外の文字が続く (例:
;BadBot
)。[Value to match] (一致する値) は、指定したウェブリクエスト部分の中央にあり、英数字または下線 (_) 以外の文字が前後にある (例:
-BadBot;
)。
- [Exactly matches] (完全に一致)
文字列と指定したリクエスト部分の値が正確に一致します。
- [Starts with] (次で開始)
文字列は指定したリクエスト部分の先頭にあります。
- [Ends with] (次で終了)
文字列は指定したリクエスト部分の末尾にあります。
- [Transformation] (変換)
変換では、AWS WAF Classic によってリクエストが検査される前に、ウェブリクエストを再フォーマットします。これにより、攻撃者が AWS WAF Classic をバイパスしようとしてウェブリクエスト内で使用する通常と異なるフォーマットの一部が排除されます。
1 種類のテキスト変換しか指定できません。
変換では次の操作を実行できます。
- [None] (なし)
AWS WAF Classic は、[Value to match] (一致する値) の文字列を検査する前にウェブリクエストのテキスト変換を行いません。
- [Convert to lowercase] (小文字に変換)
AWS WAF Classic は、大文字 (A〜Z) を小文字 (a〜z) に変換します。
- [HTML decode] (HTML デコード)
AWS WAF Classic は、HTML エンコードされた文字をエンコードされていない文字に置き換えます。
"
を&
に置き換えます。
を改行なしスペースに置き換えます。<
を<
に置き換えます。>
を>
に置き換えます。16 進数形式の文字 (
&#xhhhh;
) を対応する文字に置き換えます。10 進数形式の文字 (
&#nnnn;
) を対応する文字に置き換えます。
- [Normalize white space] (空白の正規化)
AWS WAF Classic は、次の文字を空白文字 (10 進数 32) に置き換えます。
\f、フォームフィード、10 進数 12
\t、タブ、10 進数 9
\n、改行、10 進数 10
\r、キャリッジリターン、10 進数 13
\v、垂直タブ、10 進数 11
改行なしスペース、10 進数 160
さらに、このオプションでは複数のスペースを 1 つのスペースに置き換えます。
- [Simplify command line] (コマンドラインを簡素化)
攻撃者がオペレーティングシステムのコマンドラインのコマンドを挿入し、通常と異なるフォーマットを使用してコマンドの一部または全部を偽装するおそれがある場合は、このオプションを使用して次の変換を行います。
次の文字を削除します: \ " ' ^
次の文字の前にあるスペースを削除します: / (
次の文字をスペースに置き換えます: , ;
複数のスペースを 1 つのスペースに置き換えます。
大文字 (A〜Z) を小文字 (a〜z) に変換します。
- [URL decode] (URL デコード)
URL エンコードされたリクエストをデコードします。
- [Value is base64 encoded] (値が base64 エンコードされている)
[Value to match] (一致する値) の値が base64 でエンコードされている場合は、このチェックボックスをオンにします。Base64 エンコーディングを使用して、攻撃者がリクエストに含める表示不可能な文字 (タブや改行など) を指定します。
- [Value to match] (照合する値)
AWS WAF Classic がウェブリクエスト内で検索する値を指定します。最大長は 50 バイトです 値を Base 64 でエンコードする場合は、エンコードする前の値に 50 バイトの最大長が適用されます。
文字列一致条件のフィルターの追加と削除
文字列一致条件のフィルターを追加または削除できます。フィルターを変更するには、新しいフィルターを追加して古いフィルターを削除します。
文字列一致条件のフィルターを追加または削除するには
AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/
) を開きます。 ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。
ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。
フィルターを追加または削除する対象の条件を選択します。
フィルターを追加するには、次のステップを実行します。
[Add filter] (フィルターを追加) を選択します。
適用するフィルター設定を指定します。詳細については、「文字列一致条件の作成時または編集時に指定する値」を参照してください。
[Add] (追加) を選択します。
フィルターを削除するには、次のステップを実行します。
削除するフィルターを選択します。
[Delete filter] (フィルターを削除) を選択します。
文字列一致条件の削除
文字列一致条件を削除するには、最初にその条件からすべてのフィルターを削除し、その条件を使用しているすべてのルールから条件自体を削除します。次に手順を示します。
文字列一致条件を削除するには
AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/
) を開きます。 ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。
文字列一致条件を使用しているルールからその条件を削除します。
ナビゲーションペインで [Rules] (ルール) を選択します。
削除する文字列一致条件を使用しているルールの名前を選択します。
右側のペインで、[Edit rule] (ルールを編集) を選択します。
削除する条件の横にある [X] を選択します。
[Update] (更新) を選択します。
削除する文字列一致条件を使用している残りのすべてのルールに対してこの同じ手順を繰り返します。
削除する条件からフィルターを削除します。
ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。
削除する文字列一致条件の名前を選択します。
右側のペインで、[Filter] (フィルター) の横にあるチェックボックスをオンにして、すべてのフィルターを選択します。
[Delete filter] (フィルターを削除) を選択します。
ナビゲーションペインで、[String and regex matching] (文字列および正規表現の一致) を選択します。
[String and regex match conditions] (文字列および正規表現の一致条件) ペインで、削除する文字列一致条件を選択します。
[Delete] (削除) を選択して、選択した条件を削除します。