悪意あるアップロードの検出は、アプリケーションへアップロードされたファイルとその他のコンテンツをマルウェアについてスキャンする トラフィック検出 です。
この検出をオンにすると、WAF は着信アップロードを検査し、悪意あるシグネチャがないか確認します。スキャン結果は、悪意あるコンテンツを含むリクエストに対処するために カスタムルール と レート制限ルール で使える フィールド として利用できます。
この検出をオンにすると、Cloudflare は着信トラフィックをすべて検査し、コンテンツオブジェクト を自動で特定します。
リクエスト内に 1 つ以上のコンテンツオブジェクトを検出すると、Cloudflare はそれらを分析のためウイルス対策(AV)スキャナーへ送ります。AV スキャナーは Cloudflare Zero Trust で使われるものと同じです。
スキャン結果に基づき、検出はルール式で参照できる フィールド を埋めます。たとえば、悪意あるファイルを含むリクエストをブロックするルールや、ファイルサイズ、ファイル種類、URI パスにも一致するより具体的なルールを作成できます。
コンテンツオブジェクトは、Cloudflare がスキャン可能なコンテンツとして特定した、リクエスト内のファイルまたはバイナリペイロードです。悪意あるアップロードの検出はヒューリスティックを使い、リクエストの Content-Type ヘッダーに頼らず(このヘッダーは操作できるため)、コンテンツオブジェクトを自動で見つけます。
次のコンテンツ種類はスキャン対象外です: text/html、text/x-shellscript、application/json、text/csv、text/xml。検出されたその他のコンテンツはコンテンツオブジェクトとして扱われます。よくある例:
- 実行ファイル(
.exe、.bat、.dll、.wasmなど) - ドキュメント(
.doc、.docx、.pdf、.ppt、.xlsなど) - 圧縮ファイル(
.gz、.zip、.rarなど) - 画像ファイル(
.jpg、.png、.gif、.webp、.tifなど) - 動画および音声ファイル
Cloudflare が悪意あるオブジェクトを検出しても正確なコンテンツ種類を判定できない場合、オブジェクトを application/octet-stream として報告します。
コンテンツスキャンは、次のコンテンツオブジェクトを悪意あるコンテンツについて確認できます。
- リクエスト内のアップロードファイル
multipart/form-dataまたはmultipart/mixedでエンコードされたマルチパートリクエストのリクエストボディの一部- 提供した カスタムスキャン式 に従い、リクエストボディ内の特定の JSON プロパティ(Base64 でエンコードされたファイルなど)
コンテンツスキャナーは、リクエストボディの先頭 50 MB までを検査します。リクエストに複数のコンテンツオブジェクトがある場合(複数のファイル入力を持つ送信済み HTML フォームなど)、すべてのコンテンツオブジェクトがこの 50 MB を共有します。
リクエストボディの先頭 50 MB 内のすべてのコンテンツオブジェクトが、個別に確認され、報告されます。
先頭 50 MB を超えるコンテンツの扱いは次のとおりです。
- リクエストボディが マルチパートでない(生のファイルアップロードや単一の JSON プロパティなど)かつ 50 MB より大きい場合、スキャナーはオブジェクトの先頭 50 MB を分析し、その部分に基づくスキャン結果を提供します。
- リクエストボディが マルチパート(
multipart/form-dataまたはmultipart/mixed)で、合計が 50 MB より大きい場合、先頭 50 MB に完全に収まるコンテンツオブジェクトは通常どおりスキャンされます。50 MB の境界をまたぐコンテンツオブジェクトはスキャンされず、そのあとに続くコンテンツオブジェクトもスキャンされません。これは、マルチパートリクエストにファイルが 1 つだけの場合にも当てはまります。単一部分のマルチパートアップロードでも、マルチパートボディであるためです。
コンテンツオブジェクトの場所を指定したいことがあります。たとえば、JSON ペイロード内の Base64 エンコード文字列がコンテンツである場合です。
{ "file": "<BASE64_ENCODED_STRING>" }このようなときは、カスタムスキャン式を設定し、コンテンツスキャナーにコンテンツオブジェクトの場所を伝えます。詳細は カスタムスキャン式を設定する を参照してください。
ネストした JSON ペイロード内のフィールド検索の詳細と追加例は、lookup_json_string() 関数のドキュメントを参照してください。
コンテンツスキャンが有効なとき、WAF ルールで次のフィールドを使えます。
| フィールド | 説明 |
|---|---|
Has content object cf.waf.content_scan.has_obj Boolean |
リクエストに少なくとも 1 つのコンテンツオブジェクトが含まれるかどうかを示します。 |
Has malicious content object cf.waf.content_scan.has_malicious_obj Boolean |
リクエストに少なくとも 1 つの悪意あるコンテンツオブジェクトが含まれるかどうかを示します。 |
Number of malicious content objects cf.waf.content_scan.num_malicious_obj Integer |
リクエストで検出された悪意あるコンテンツオブジェクトの数です(0 以上)。 |
Content scan has failed cf.waf.content_scan.has_failed Boolean |
リクエストで検出されたコンテンツオブジェクトのいずれかを、ファイルスキャナーがスキャンできなかったかどうかを示します。 |
Content scan truncated cf.waf.content_scan.truncated Boolean |
リクエストボディがコンテンツスキャンのサイズ制限を超え、スキャン前に切り捨てられたかどうかを示します。スキャン結果が不完全なことがあります。サイズ制限 を参照してください。 |
Number of content objects cf.waf.content_scan.num_obj Integer |
リクエストで検出されたコンテンツオブジェクトの数です(0 以上)。 |
Content object size cf.waf.content_scan.obj_sizes Array<Integer> |
リクエストでコンテンツオブジェクトが検出された順の、ファイルサイズ(バイト)の配列です。 |
Content object type cf.waf.content_scan.obj_types Array<String> |
リクエストでコンテンツオブジェクトが検出された順の、ファイル種類の配列です。 |
Content object result cf.waf.content_scan.obj_results Array<String> |
リクエストでコンテンツオブジェクトが検出された順の、スキャン結果の配列です。 取りうる値: clean、suspicious、infected、not scanned。 |
これらのフィールドを使うルール式の例は ルールの例 を参照してください。