Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

悪意あるアップロードの検出

最終更新 Markdown で表示Agent セットアップ

悪意あるアップロードの検出は、アプリケーションへアップロードされたファイルとその他のコンテンツをマルウェアについてスキャンする トラフィック検出 です。

この検出をオンにすると、WAF は着信アップロードを検査し、悪意あるシグネチャがないか確認します。スキャン結果は、悪意あるコンテンツを含むリクエストに対処するために カスタムルールレート制限ルール で使える フィールド として利用できます。

仕組み

この検出をオンにすると、Cloudflare は着信トラフィックをすべて検査し、コンテンツオブジェクト を自動で特定します。

リクエスト内に 1 つ以上のコンテンツオブジェクトを検出すると、Cloudflare はそれらを分析のためウイルス対策(AV)スキャナーへ送ります。AV スキャナーは Cloudflare Zero Trust で使われるものと同じです。

スキャン結果に基づき、検出はルール式で参照できる フィールド を埋めます。たとえば、悪意あるファイルを含むリクエストをブロックするルールや、ファイルサイズ、ファイル種類、URI パスにも一致するより具体的なルールを作成できます。

コンテンツオブジェクトとは

コンテンツオブジェクトは、Cloudflare がスキャン可能なコンテンツとして特定した、リクエスト内のファイルまたはバイナリペイロードです。悪意あるアップロードの検出はヒューリスティックを使い、リクエストの Content-Type ヘッダーに頼らず(このヘッダーは操作できるため)、コンテンツオブジェクトを自動で見つけます。

次のコンテンツ種類はスキャン対象外です: text/htmltext/x-shellscriptapplication/jsontext/csvtext/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>
リクエストでコンテンツオブジェクトが検出された順の、スキャン結果の配列です。
取りうる値: cleansuspiciousinfectednot scanned

これらのフィールドを使うルール式の例は ルールの例 を参照してください。

役に立ちましたか?