Skip to content

插件 ​

插件是 FlowMind 的安全检测核心,所有扫描规则和标签脚本都在此管理。插件页面分为三个标签页:规则(被动扫描)、扫描(主动扫描)和标签(请求标签脚本)。

插件

功能概述 ​

  • 规则管理:查看、创建、编辑、删除被动扫描规则脚本
  • 扫描管理:查看、创建、编辑、删除主动扫描规则脚本
  • 标签脚本:编写 Rhai 函数,为请求自动添加标签
  • 热重载:修改脚本后一键重载,无需重启应用
  • 规则调试:选中 Flow 调试规则执行结果
  • 项目配置:按项目启用/禁用规则

页面布局 ​

插件页顶部有三个标签页切换:

标签说明
规则被动扫描脚本管理(plugins/scanner/passive/)
扫描主动扫描脚本管理(plugins/scanner/active/)
标签标签脚本管理

规则(被动扫描) ​

被动扫描规则的编辑与管理界面。规则以 .rhai 文件形式存储在 plugins/scanner/passive/ 目录。

规则列表 ​

  • 内置规则:编译集成,首次启动自动释放,只读不可编辑
  • 工作区规则:用户创建,可编辑、删除、重命名
  • 状态指示:显示规则是否已启用、元数据信息

操作 ​

操作说明
启用/禁用切换规则启用状态
编辑打开脚本编辑器修改规则
创建在工作区创建新的规则文件
删除删除工作区规则
重载重新加载所有脚本文件
调试选中 Flow 后调试规则输出

执行流程 ​

mermaid
flowchart LR
    Traffic[流量捕获] --> Engine[被动扫描引擎]
    Engine --> Rules[规则匹配]
    Rules --> Findings[安全发现]
    Findings --> Store[Finding 存储]
    Store --> Drawer[发现面板]

被动扫描在流量捕获时自动触发,无需人工干预。规则对所有 HTTP/HTTPS 和 WebSocket 流量进行安全检查,发现结果自动存入 Finding 存储,可通过状态栏的发现面板或报告页面查看。

内置规则 ​

内置 28 条被动扫描规则,默认全部启用,覆盖 OWASP Top 10 常见风险。完整规则列表见下方。

扫描(主动扫描) ​

主动扫描规则的管理界面。规则以 .rhai 文件形式存储在 plugins/scanner/active/ 目录。

执行流程 ​

mermaid
flowchart LR
    Traffic[流量捕获] --> Dispatcher[主动扫描分发器]
    Dispatcher --> RateLimit[速率限制]
    RateLimit --> Probe[发送探测请求]
    Probe --> Detect[Payload 检测]
    Detect --> Findings[安全发现]

主动扫描在流量捕获时自动并发执行(默认关闭,需在项目中启用),对目标发送探测请求。

内置规则 ​

内置 8 条主动扫描规则,默认全部关闭,需在项目中显式启用。

标签脚本 ​

标签脚本是使用 Rhai 语言编写的函数,用于为捕获的请求自动添加标签。

用途 ​

  • 端点分类:根据 URL 模式标记 API 端点类型
  • 敏感操作标记:识别并标记涉及敏感操作的请求
  • 技术栈识别:根据响应头标记技术栈信息
  • 自定义标注:按项目需求自定义标签逻辑

函数格式 ​

标签脚本导出 fn tag(flow) 函数,返回字符串数组作为标签:

rust
fn tag(flow) {
    let tags = [];
    if host_url_match(flow, "/api/admin") {
        tags.push("admin");
    }
    if host_url_match(flow, "(?i)(login|auth|token)") {
        tags.push("auth");
    }
    if host_header_absent(flow, "req", "authorization") {
        tags.push("no-auth");
    }
    tags
}

示例标签脚本 ​

rust
//! name: API 端点分类
//! description: 根据路径和方法分类 API 端点

fn tag(flow) {
    let tags = [];
    let method = flow.method;
    let url = flow.url;

    // 按方法分类
    if method == "GET" { tags.push("read"); }
    if method == "POST" { tags.push("write"); }
    if method == "DELETE" { tags.push("delete"); }
    if method == "PUT" || method == "PATCH" { tags.push("update"); }

    // 按路径分类
    if host_url_match(flow, "/api/") { tags.push("api"); }
    if host_url_match(flow, "(?i)(admin|manage)") { tags.push("admin"); }
    if host_url_match(flow, "(?i)(login|logout|signin|signout)") { tags.push("auth"); }

    // 按状态码分类
    if flow.status_code >= 500 { tags.push("server-error"); }
    if flow.status_code >= 400 && flow.status_code < 500 { tags.push("client-error"); }

    tags
}

脚本编辑器 ​

所有规则和标签脚本共享同一个编辑器界面,支持:

  • 语法高亮:Rhai 脚本语法高亮
  • 代码折叠:折叠/展开代码块
  • 错误提示:编译错误实时显示
  • 调试输出:执行结果预览

项目配置 ​

  • 进入 设置 → 项目设置 可为当前项目启用/禁用规则
  • 主动规则默认关闭,需在项目中显式启用
  • 规则配置按项目保存,切换项目自动切换配置

查看发现 ​

扫描发现的 Finding 可通过以下方式查看:

  • 状态栏发现面板:点击状态栏的发现图标,快速查看最近的发现
  • 报告页面:在报告的 发现 标签页中浏览和管理所有发现

具体操作详见 报告 → 发现管理。

内置规则列表 ​

被动规则(28 条,默认全部启用) ​

规则 ID名称检测内容严重程度
sensitive-data敏感信息泄露手机号、身份证、邮箱、密钥等High
credit-card信用卡号泄露Visa/MasterCard/Amex 卡号High
transport-http-sensitiveHTTP 明文敏感参数明文传输 password/token/secretHigh
transport-hsts-missingHSTS 缺失HTTPS 响应缺少 HSTS 头High
certificate服务端证书问题证书自签名或已过期High
sqli-patternSQL 注入模式UNION SELECT、OR 1=1 等特征High
path-traversal路径遍历模式../ 或 ..\ 路径穿越High
api-key-in-urlURL 暴露 API KeyURL 查询参数含 api_key 等High
websocket-ws-sensitiveWebSocket 明文敏感信息ws:// 传输 password/tokenHigh
websocket-ws-plaintextWebSocket 明文连接ws:// 明文协议连接High
cookie-securityCookie 安全属性缺失缺少 HttpOnly/Secure/SameSiteMedium
corsCORS 配置不安全ACAO: * + ACAC: trueMedium
cspCSP 配置宽松unsafe-inline、unsafe-eval、*Medium
x-frame-optionsX-Frame-Options 缺失可能被嵌入 iframe 点击劫持Medium
jwt-tokenJWT Token 泄露响应体包含 eyJ 开头的 JWTMedium
stack-trace堆栈跟踪泄露响应包含调试堆栈信息Medium
debug-page调试页面暴露Flask debug、PHPInfo、Spring Boot 错误页Medium
directory-listing目录列表暴露Index of / 目录列表Medium
open-redirect开放重定向Location 指向外部域名的 3xxMedium
host-header-injectionHost 头注入响应反射请求的 Host 头Medium
xss-reflectionXSS 反射模式未编码的 <script> 或事件处理器Medium
content-typeContent-Type 安全头缺失缺少 X-Content-Type-OptionsLow
info-leak服务器信息泄露Server/X-Powered-By 等技术栈头Low
internal-ip内网 IP 泄露响应含 RFC1918 内网 IP 地址Low
referrer-policyReferrer-Policy 缺失缺少 Referrer-Policy 头Low
permissions-policyPermissions-Policy 缺失缺少权限控制策略头Low
cache-controlCache-Control 缺失敏感页面缺少缓存控制头Low
x-xss-protectionX-XSS-Protection 缺失缺少 XSS 过滤头(兼容旧浏览器)Low

主动规则(8 条,默认全部关闭) ​

规则 ID名称检测方式严重程度
active-sqli-error主动 SQL 注入(报错)追加引号 payload,检测数据库错误特征High
active-cmd-injection主动命令执行追加 echo canary,检测回显High
active-path-traversal主动路径穿越替换为 ../etc/passwd payloadHigh
active-ssrf主动 SSRF注入内网地址,检测连接失败或元数据特征High
active-xss-reflect主动 XSS 反射追加唯一探测标记,检测响应回显Medium
active-open-redirect主动开放重定向注入外部探测域名,检测 Location 跳转Medium
active-ssti主动模板注入追加算术表达式,检测求值结果Medium
active-error-disclosure主动异常信息泄露注入畸形输入,对比基线检测堆栈变化Low

插件开发 ​

所有扫描规则使用 Rhai 脚本 语言编写。详见:

故障排除 ​

规则不触发 ​

  1. 检查规则是否在项目中启用
  2. 确认代理正在运行且捕获到流量
  3. 被动规则在请求完成后自动触发,主动规则在有流量时运行
  4. 查看日志中的扫描信息

脚本加载失败 ​

  1. 检查 .rhai 文件格式和语法
  2. 确认元数据头(//!)格式正确
  3. 查看应用日志中的编译错误信息
  4. 点击 重载 刷新

性能问题 ​

  1. 减少同时启用的规则数量
  2. 在脚本中尽早 return 以减少不必要的正则匹配
  3. 调整主动扫描的并发限制
  4. 定期清理历史 Flow 数据