特定の拡張子を持つファイルのアップロード (HTTP POST リクエスト) の制限をウェブサーバーに適用したい。
簡単な説明
HTTP リクエストの POST データを分析する場合、アップロードされるコンテンツには次の 2 つのタイプがあります。
注: AWS WAF はリクエスト本文の最初の 8 KB (8,192 バイト) を検査します。さらに大きな本文のリクエストについては、「AWS WAF でのオーバーサイズのウェブリクエストコンポーネントの処理」を参照してください。
.pdf、.docx、.exe などの特定のファイル拡張子を使用するファイルのアップロードを制限するには、次の手順を実行してください。
- リクエストの BODY を検査するカスタムウェブアクセスコントロールリスト (ウェブ ACL) ルールを作成します。
- ルール内に正規表現の一致条件を作成します。この正規表現パターンを使用して、複数のファイル拡張子を制限するルールを設定します。
- ルールアクションを BLOCK に設定します。
- このカスタムルールが、このルールをブロックする可能性のあるどのウェブ ACL ルールよりも優先度が高くなるように、ルールの優先度を定義します。
- ルールが特定のファイル拡張子を正常にブロックしていることを確認します。
解決策
POST データが使用するコンテンツのタイプを識別する
HTTP リクエスト内の POST データは通常、フォームデータまたはバイナリのいずれかを使用します。
- フォームデータには、HTTP がウェブサーバーに送信 (または「投稿」) するウェブページ (または「HTML フォーム」) にユーザーが入力するすべてのデータが含まれます。
- バイナリペイロードはテキストペイロードとは異なります。たとえば、バイナリペイロードには、.jpeg ファイル、.gzip ファイル、または .xml ファイルを使用できます。これには、.pdf アプリケーション、.jpeg 画像、.zip アプリケーションなどの一般的なバイナリデータが含まれます。すべてのファイル拡張子タイプについては、Internet Assigned Numbers Authority (IANA) ウェブサイトの「メディアタイプ」を参照してください。
POST リクエストのタイプを識別するには、HTTP POST ヘッダーの Content-Type 値を参照してください。次の例には、multipart/form-data の Content-Type が含まれています。
Content-Type: multipart/form-data
ヘッダー「Content-Type」の値が「multipart/form-data」の場合は、次の手順を実行してルールを作成します。
-
AWS WAF コンソールを開きます。
-
ナビゲーションペインの [AWS WAF] で、[ウェブ ACL] を選択します。
-
[リージョン] で、ウェブ ACL を作成した AWS リージョンを選択します。
注: Amazon CloudFront のウェブ ACL を設定した場合は、[グローバル] を選択します。
-
ウェブ ACL を選択します。次に、[ルール] タブを選択します。
-
[ルールを追加] ドロップダウンリストを選択し、[独自のルールとルールグループを追加] を選択します。
-
[ルールタイプ] で [ルールビルダー] を選択します。
-
[名前] に、このルールを識別するための名前を入力します。
-
[タイプ] で [正規ルール] を選択します。
-
[リクエストがあった場合] で、[ステートメント****と一致] を選択します。次に、[ステートメント] の以下のフィールドに入力します。
[検査] で [本文] を選択します。
[コンテンツタイプ] で [JSON] を選択します。
[JSON の一致範囲] で [値] を選択します。
[リクエスト本文の JSON が無効な場合の AWS WAF によるリクエストの処理方法] で、ユースケースに応じたオプションを選択します。
[検査する内容] で [すべての JSON コンテンツ] を選択します。
[一致タイプ] で [正規表現と一致] を選択します。
[正規表現] で、一致する正規表現パターンを入力します。以下の例を参照してください:
(?:.pdf|.doc|.docx|.ppt)
-
(オプション) [テキスト変換] では、テキスト変換を追加することも、これらのフィールドを [なし] のままにすることもできます。
-
[オーバーサイズハンドリング] で、ユースケースに応じたオプションを選択します。
-
[アクション] で [ブロック] を選択します。
-
[ルールを追加] を選択します。
-
(オプション) [ルールの優先度を設定] で、ルールを選択して優先度を変更します。AWS WAF は、表示されている順序でルールを処理します。詳細については、「ウェブ ACL でのルールおよびルールグループの処理順序」を参照してください。
-
[保存] を選択します。
ルールが正常に動作することを確認してください。
**ヘッダー「Content-Type」に「application/pdf」や「application/ppt」**などのバイナリ値が含まれている場合は、次の手順を実行してルールを作成します。
-
AWS WAF コンソールを開きます。
-
ナビゲーションペインの [AWS WAF] で、[ウェブ ACL] を選択します。
-
[リージョン] で、ウェブ ACL を作成した AWS リージョンを選択します。注: Amazon CloudFront のウェブ ACL を設定した場合は、[グローバル] を選択します。
-
ウェブ ACL を選択します。次に、[ルール] タブを選択します。
-
[ルールを追加] ドロップダウンリストを選択し、[独自のルールとルールグループを追加] を選択します。
-
[ルールタイプ] で [ルールビルダー] を選択します。
-
[名前] に、このルールを識別するための名前を入力します。
-
[タイプ] で [正規ルール] を選択します。
-
[リクエストがあった場合] で、[ステートメント****と一致] を選択します。次に、[ステートメント] の以下のフィールドに入力します。
[検査] で [単一ヘッダー] を選択します。
[ヘッダーフィールド名] に「Content-Type」を入力します。
[一致タイプ] で [正規表現と一致] を選択します。
[正規表現] で、一致する正規表現パターンを入力します。
.pdf ファイルおよび .jpeg ファイルについては、次の例を参照してください。
(?:pdf|jpeg)
-
(オプション) [テキスト変換] では、テキスト変換を追加することも、これらのフィールドを [なし] のままにすることもできます。
-
[アクション] で [ブロック] を選択します。
-
[ルールを追加] を選択します。
-
(オプション) [ルールの優先度を設定] で、ルールを選択して優先度を変更します。AWS WAF は、表示されている順序でルールを処理します。詳細については、「ウェブ ACL でのルールおよびルールグループの処理順序」を参照してください。
-
[保存] を選択します。
-
ルールが正常に動作することを確認してください。
注: ルールを特定のアップロード URI パスに制限するには、パスを検査するウェブ ACL ルール内で AND ステートメントを使用します。