恶意上传检测是一种流量检测,用于扫描上传到您的应用的文件及其他内容是否存在恶意软件。
启用此检测后,WAF 会检查传入上传并查找恶意签名。扫描结果可作为字段使用,您可在 custom rules 与 rate limiting rules 中引用这些字段,以对包含恶意内容的请求采取措施。
启用此检测后,Cloudflare 会检查所有传入流量并自动识别 content objects。
当 Cloudflare 在请求中检测到一个或多个 content objects 时,会将其发送到防病毒(AV)扫描器进行分析。该 AV 扫描器与 Cloudflare Zero Trust 中使用的相同。
基于扫描结果,检测会填充可在规则表达式中引用的字段。例如,您可以创建规则以阻止带有恶意文件的请求,或创建更具体的规则,同时匹配文件大小、文件类型或 URI 路径。
content object 是请求中被 Cloudflare 识别为可扫描内容的文件或二进制载荷。恶意上传检测使用启发式方法自动查找 content objects,而不依赖请求的 Content-Type 请求头(因为该请求头可能被操纵)。
以下内容类型会被排除在扫描之外:text/html、text/x-shellscript、application/json、text/csv 与 text/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-data或multipart/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 的顺序排列的扫描结果数组。 可能的值: clean、suspicious、infected 与 not scanned。 |
有关使用这些字段的规则表达式示例,请参阅 Example rules。