SQL インジェクション一致条件の使用
警告
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」を参照してください。
攻撃者は、データベースからデータを取り出そうとしてウェブリクエスト内に悪意のある SQL コードを挿入する場合があります。悪意のある SQL コードが含まれている可能性があるウェブリクエストを許可またはブロックするには、SQL インジェクション一致条件を作成します。SQL インジェクション一致条件は、AWS WAF Classic で検査するウェブリクエスト内の部分 (URI パスやクエリ文字列など) を識別します。後でウェブ ACL を作成するときに、悪意のある SQL コードが含まれている可能性があるリクエストを許可するかブロックするかを指定します。
トピック
SQL インジェクション一致条件の作成
SQL インジェクション一致条件を作成するときに、AWS WAF Classic で悪意のある SQL コードを検査する先のウェブリクエスト部分 (URI やクエリ文字列など) を絞り込むフィルターを指定します。SQL インジェクション一致条件には複数のフィルターを追加できます。条件ごとに 1 つのフィルターを設定することもできます。2 つの設定間では AWS WAF Classic の動作が以下のように異なります。
SQL インジェクション一致条件ごとに複数のフィルター (推奨) - 複数のフィルターを含む SQL インジェクション一致条件をロールに追加し、そのルールをウェブ ACL に追加すると、ウェブリクエストが SQL インジェクション一致条件のいずれかのフィルターに一致するだけで、AWS WAF Classic はその条件に基づくリクエストを許可またはブロックします。
例えば、SQL インジェクション一致条件を 1 つ作成し、この条件に 2 つのフィルターを含めたとします。1 つのフィルターは AWS WAF Classic に悪意のある SQL コードがないか URI を検査するように指示し、もう 1 つは AWS WAF Classic にクエリ文字列を検査するように指示します。AWS WAFこの場合、URI またはクエリ文字列のいずれかに悪意のある SQL コードが含まれている可能性があれば、Classic はリクエストを許可またはブロックします。
SQL インジェクション一致条件ごとに 1 つのフィルター - 個別の SQL インジェクション一致条件をルールに追加し、そのルールをウェブ ACL に追加すると、ウェブリクエストがすべての条件と一致した場合に限り、AWS WAF Classic はこれらの条件に基づいてリクエストを許可またはブロックします。
2 つの条件を作成し、各条件に前の例で示した 2 つのフィルターの 1 つを別個に含めたとします。両方の条件を同じルールに追加し、そのルールをウェブ ACL に追加した場合は、URI とクエリ文字列の両方に悪意のある SQL コードが含まれている可能性がある場合に限り、AWS WAF Classic はリクエストを許可またはブロックします。
注記
SQL インジェクション一致条件を追加するときに、悪意のある SQL コードが含まれていない可能性があるウェブリクエストを許可またはブロックするように AWS WAF Classic を設定することもできます。
ステップ 5: SQL インジェクション一致条件を作成するには
AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/
) を開きます。 ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。
ナビゲーションペインで、[SQL injection] (SQL インジェクション) を選択します。
[Create condition] (条件を作成) を選択します。
適用するフィルター設定を指定します。詳細については、「SQL インジェクション一致条件の作成時または編集時に指定する値」を参照してください。
[Add another filter] (別のフィルターを追加) を選択します。
別のフィルターを追加する場合は、ステップ 4〜5 を繰り返します。
フィルターの追加が終了したら、[Create] (作成) を選択します。
SQL インジェクション一致条件の作成時または編集時に指定する値
SQL インジェクション一致条件を作成または更新するときに、次の値を指定します。
- [Name] (名前)
SQL インジェクション一致条件の名前。
名前に使用できるのは英数字 (A~Z、a~z、0~9) または特殊文字 _-!"#`+*},./ です。一度作成した条件の名前は変更できません。
- [Part of the request to filter on] (フィルタリングするリクエストの一部)
AWS WAF Classic で悪意のある SQL コードを検査する先の各ウェブリクエスト内の部分を選択します。
- [Header] (ヘッダー)
指定したリクエストヘッダー (
User-Agent
やReferer
など)。[Header] (ヘッダー) を選択した場合は、[Header] (ヘッダー) フィールドにヘッダー名を指定します。- [HTTP method] (HTTP メソッド)
リクエストがオリジンに実行を要求しているオペレーションのタイプを示す HTTP メソッド。CloudFront がサポートしているメソッドは、
DELETE
、GET
、HEAD
、OPTIONS
、PATCH
、POST
、およびPUT
です。- [Query string] (クエリ文字列)
URL 内で
?
文字の後に続く部分 (ある場合)。注記
SQL インジェクションの一致条件については、[Part of the request to filter on] (フィルタリングするリクエストの一部) に [Query string] (クエリ文字列) ではなく、[All query parameters (values only)] (すべてのクエリパラメータ (値のみ)) を選択することをお勧めします。
- [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 パラメータにフィルターを追加できます。
[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 によって悪意のある SQL コードが含まれていないか検査されます。例えば、URL が「www.xyz.com?UserName=abc&SalesRegion=seattle」の場合、[All query parameters (values only)] (すべてのクエリパラメータ (値のみ)) を選択すると、UserName or SalesRegion のいずれかの値に悪意のある可能性がある SQL コードが含まれている場合、AWS WAF Classic によって一致がトリガーされます。
- [Header] (ヘッダー)
[Part of the request to filter on] (フィルタリングするリクエストの一部) として [Header] (ヘッダー) を選択した場合は、一般的なヘッダーのリストからヘッダーを選択するか、AWS WAF Classic で悪意のある SQL コードを検査するヘッダー名を入力します。
- [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 エンコードされたリクエストをデコードします。
SQL インジェクション一致条件のフィルターの追加と削除
SQL インジェクション一致条件のフィルターを追加または削除できます。フィルターを変更するには、新しいフィルターを追加して古いフィルターを削除します。
SQL インジェクション一致条件のフィルターを追加または削除するには
AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/
) を開きます。 ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。
ナビゲーションペインで、[SQL injection] (SQL インジェクション) を選択します。
フィルターを追加または削除する対象の条件を選択します。
フィルターを追加するには、次のステップを実行します。
[Add filter] (フィルターを追加) を選択します。
適用するフィルター設定を指定します。詳細については、「SQL インジェクション一致条件の作成時または編集時に指定する値」を参照してください。
[Add] (追加) を選択します。
フィルターを削除するには、次のステップを実行します。
削除するフィルターを選択します。
[Delete filter] (フィルターを削除) を選択します。
SQL インジェクション一致条件の削除
SQL インジェクション一致条件を削除するには、最初にその条件からすべてのフィルターを削除し、その条件を使用しているすべてのルールから条件自体を削除します。次に手順を示します。
SQL インジェクション一致条件を削除するには
AWS Management Console にサインインして AWS WAF コンソール (https://console.aws.amazon.com/wafv2/
) を開きます。 ナビゲーションペインに、[Switch to AWS WAF Classic] ( Classic に切り替える) が表示されたら、それを選択します。
ナビゲーションペインで、[SQL injection] (SQL インジェクション) を選択します。
[SQL injection match conditions] (SQL インジェクション一致条件) ペインで、削除する SQL インジェクション一致条件を選択します。
右ペインで、[Associated rules] (関連付けられたルール) タブを選択します。
この SQL インジェクション一致条件を使用しているルールのリストが空の場合は、ステップ 6 に進みます。リストにルールが含まれている場合は、ルールを書き留めて、ステップ 5 に進みます。
SQL インジェクション一致条件を使用しているルールから、この条件を削除するには、次のステップを実行します。
ナビゲーションペインで [Rules] (ルール) を選択します。
削除する SQL インジェクション一致条件を使用しているルールの名前を選択します。
右ペインで、ルールから削除する SQL インジェクション一致条件を選択し、[Remove selected condition] (選択した条件を削除) を選択します。
削除する SQL インジェクション一致条件を使用しているすべての残りのルールに対してステップ b とステップ c を繰り返します。
ナビゲーションペインで、[SQL injection] (SQL インジェクション) を選択します。
[SQL injection match conditions] (SQL インジェクション一致条件) ペインで、削除する SQL インジェクション一致条件を選択します。
[Delete] (削除) を選択して、選択した条件を削除します。