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