跳转到内容
搜索文档

恶意上传检测

最后更新 查看 MarkdownAgent 设置

恶意上传检测是一种流量检测,用于扫描上传到您的应用的文件及其他内容是否存在恶意软件。

启用此检测后,WAF 会检查传入上传并查找恶意签名。扫描结果可作为字段使用,您可在 custom rulesrate limiting rules 中引用这些字段,以对包含恶意内容的请求采取措施。

工作原理

启用此检测后,Cloudflare 会检查所有传入流量并自动识别 content objects

当 Cloudflare 在请求中检测到一个或多个 content objects 时,会将其发送到防病毒(AV)扫描器进行分析。该 AV 扫描器与 Cloudflare Zero Trust 中使用的相同。

基于扫描结果,检测会填充可在规则表达式中引用的字段。例如,您可以创建规则以阻止带有恶意文件的请求,或创建更具体的规则,同时匹配文件大小、文件类型或 URI 路径。

什么是 content object?

content object 是请求中被 Cloudflare 识别为可扫描内容的文件或二进制载荷。恶意上传检测使用启发式方法自动查找 content objects,而不依赖请求的 Content-Type 请求头(因为该请求头可能被操纵)。

以下内容类型会被排除在扫描之外:text/htmltext/x-shellscriptapplication/jsontext/csvtext/xml。所有其他检测到的内容都视为 content object。常见示例包括:

  • 可执行文件(例如 .exe.bat.dll.wasm
  • 文档(例如 .doc.docx.pdf.ppt.xls
  • 压缩文件(例如 .gz.zip.rar
  • 图片文件(例如 .jpg.png.gif.webp.tif
  • 视频与音频文件

若 Cloudflare 检测到恶意对象但无法确定其确切内容类型,会将该对象报告为 application/octet-stream

扫描内容

内容扫描可检查以下 content objects 是否包含恶意内容:

  • 请求中的上传文件
  • 编码为 multipart/form-datamultipart/mixed 的 multipart 请求正文的部分内容
  • 根据您提供的自定义扫描表达式,请求正文中的特定 JSON 属性(例如包含 Base64 编码的文件)

将检查传入请求中的所有 content objects,包括带有多个上传文件的请求(例如包含多个文件输入的 HTML 表单提交)。

内容扫描器会完整检查大小不超过 50 MB 的 content objects。对于更大的 content objects,扫描器会分析前 50 MB,并基于该部分对象提供扫描结果。

自定义扫描表达式

有时您可能需要指定在何处查找 content objects,例如当内容是 JSON 载荷中的 Base64 编码字符串时。例如:

{ "file": "<BASE64_ENCODED_STRING>" }

在这些情况下,请配置自定义扫描表达式,告知内容扫描器在何处查找 content objects。更多信息请参阅 Configure a custom scan expression

有关在嵌套 JSON 载荷中查找字段的更多信息与其他示例,请参阅 lookup_json_string() 函数文档。

内容扫描字段

启用内容扫描后,您可以在 WAF 规则中使用以下字段:

字段 描述
Has content object
cf.waf.content_scan.has_obj
Boolean
指示请求是否包含至少一个 content object。
Has malicious content object
cf.waf.content_scan.has_malicious_obj
Boolean
指示请求是否包含至少一个恶意 content object。
Number of malicious content objects
cf.waf.content_scan.num_malicious_obj
Integer
请求中检测到的恶意 content objects 数量(零或更大)。
Content scan has failed
cf.waf.content_scan.has_failed
Boolean
指示文件扫描器是否无法扫描请求中检测到的任何 content objects。
Number of content objects
cf.waf.content_scan.num_obj
Integer
请求中检测到的 content objects 数量(零或更大)。
Content object size
cf.waf.content_scan.obj_sizes
Array<Integer>
按请求中检测到 content objects 的顺序排列的文件大小(字节)数组。
Content object type
cf.waf.content_scan.obj_types
Array<String>
按请求中检测到 content objects 的顺序排列的文件类型数组。
Content object result
cf.waf.content_scan.obj_results
Array<String>
按请求中检测到 content objects 的顺序排列的扫描结果数组。
可能的值:cleansuspiciousinfectednot scanned

有关使用这些字段的规则表达式示例,请参阅 Example rules

这篇文档对您有帮助吗?