首页 / 文章 / 实用笔记:我开发了一款MCP安全扫描工具,能够将QA测试流量转换成……

实用笔记:我开发了一款MCP安全扫描工具,能够将QA测试流量转换成……

实用笔记操作指南:我开发了一款MCP安全扫描工具,可将QA测试流量转化为适用于采用该模式的团队的合同、检查项以及可直接插入的代码模块。

2810 词

本指南将逐步构建从原材料到可运行系统的完整流程,内容来自《我打造了一个能将QA流量转化为安全测试的MCP安全扫描器》。重点在于可操作的步骤、明确的检查点,以及可直接放入代码库的代码,无需猜测其用途。 在概览阶段,应在修改代码之前明确输入参数、各步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行相应步骤,而无需猜测隐藏的状态。 配置信息应与应用程序代码分开存放。环境文件、密钥存储以及功能开关都应集中管理,这样操作人员只需查看这些内容即可,无需浏览整个系统结构。

问题所在

在处理“问题分析”阶段时,首先写下相关契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改不会偏离原定方向。 同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的一部分,而非后续需要补充的功能。 需为每次调用记录工具名称、参数哈希值、延迟时间以及最终结果。没有这些记录,调试过程将会浪费大量时间。

从质量检测流量到安全测试

在将代码从质量检测阶段推进到正式使用阶段时,首先需明确相关约定:所需的输入参数、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合预期。 相比庞大的脚本,应优先选择小型且易于测试的单元。当某个步骤出现故障时,故障点应能指向具体的责任模块,而非复杂的流程链。 需为每次调用记录工具名称、参数哈希值、处理延迟以及最终结果。没有这些记录,调试过程将会浪费大量时间。

QA Automation
      │
      ▼
HTTP Traffic
      │
      ▼
    HAR File
      │
      ▼
Security Scanner
      │
      ▼
Security Findings

于是你打造出了一个

在完成“你已构建一个”阶段时,首先写下契约:所需的输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持透明。 将这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功检测标准,并杜绝无声的半完成状态。 记录每次调用的工具名称、参数哈希值、延迟时间以及结果。没有这些记录,调试过程将会浪费大量时间。 在完成“你已构建一个”阶段时,首先写下契约:所需的输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持透明。 将配置信息置于应用程序代码之外。环境文件、密钥存储以及功能开关应集中存放于一个位置,以便操作员无需查看整个系统结构即可进行审计。

Playwright
                        │
                        ▼
                 Network Traffic
                        │
                        ▼
                     HAR File
                        │
                        ▼
                   HAR Parser
                        │
                        ▼
              Normalized Transactions
                        │
                        ▼
                 Security Rules
                   │         │
                   ▼         ▼
                MCP Tool   CLI Gate
                   │         │
                   ▼         ▼
                 AI        CI/CD

它能检测什么?

将“它能检测什么”这一阶段视为可测量的界面来处理,效果最佳。在扩大范围之前,先记录一个成功的用例、一个失败案例以及回滚说明。同时记录正常流程和恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的组成部分,而非后续需要补充的功能。应提供具有明确结构规范和清晰副作用标识的工具,这样主机在自动批准之前就能知道哪些调用会改变状态。

缺少 HSTS

将缺失的 HSTS 阶段视为可测量的对象来处理效果最佳。在扩大范围之前,先记录一份理想的测试用例、一个故障案例以及回滚说明。 优先选择小型且可测试的单元,而非庞大的脚本。当某个步骤出现故障时,故障应指向单一责任模块,而非复杂的流程链。 使用结构清晰、带有明确副作用标注的工具。主机需要在自动批准之前知道哪些调用会修改状态。

Strict-Transport-Security

明文 HTTP

将明文HTTP阶段视为可度量的对象来处理,效果最佳。在扩大范围之前,需记录一份理想状态下的输出样本、一个故障案例以及回滚说明。 应将此阶段视为输入与经过验证的输出之间的契约。为相关输出文件命名,明确成功标准,杜绝默许的半完成状态。 需提供具有严格结构定义和明确副作用标识的工具。主机在自动批准之前必须清楚哪些调用会改变系统状态。 将明文HTTP阶段视为可度量的对象来处理,效果最佳。在扩大范围之前,需记录一份理想状态下的输出样本、一个故障案例以及回滚说明。 配置应置于应用程序代码之外。环境文件、密钥存储及功能开关应集中存放,以便操作人员无需查看整个系统结构即可进行审计。

http://
https://

不安全的Cookie

在“不安全 Cookie”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的组成部分,而非后续需要补充的功能。 在网关处进行身份验证,在数据层再次授权。仅凭承载令牌并不足以界定租户边界。

Secure
HttpOnly
SameSite

潜在的敏感信息泄露风险

在潜在秘密泄露阶段,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。相比庞大的脚本,更应采用小型且可测试的单元。当某个步骤失败时,故障原因应能指向单一责任主体,而非复杂的流程链。应在网关处进行身份验证,在数据层再次授权——仅凭承载令牌并不足以界定租户边界。

{
  "apiKey": "..."
}

URL中的敏感参数

在“URL中的敏感参数”阶段,应在修改代码之前明确输入内容、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功检测标准,并拒绝默许的半完成状态。 在网关处进行身份验证,在数据层面重新授权。仅凭承载令牌并不足以界定租户边界。 在“URL中的敏感参数”阶段,应在修改代码之前明确输入内容、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将配置置于应用程序代码之外。环境文件、密钥存储以及功能标志应集中存放于一个操作人员可审计的位置,无需查看整个系统结构。

/api/user?token=...

符合卢恩算法规则的支付卡号

在处理符合卢恩算法规则的支付卡号这一阶段时,首先需明确合同要求:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改不会偏离原定方向。 需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及错误处理措施都是产品功能的一部分,而非后续需要补充的内容。 对于每次调用,都要记录工具名称、参数哈希值、响应延迟以及最终结果。如果没有这些记录,调试过程将会浪费大量时间。

CORS配置错误

在处理 CORS 配置错误问题时,首先需明确相关规范:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合预期。 建议采用小型、可测试的单元而非庞大的脚本。当某个步骤出错时,错误应指向单一责任模块,而非复杂的流程链。 需为每次调用记录工具名称、参数哈希值、延迟时间以及最终结果。没有这些记录,调试过程将会浪费大量时间。

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

为何选择 MCP?

在处理“Why MCP”阶段时,首先需写下契约内容:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 将此阶段视为输入与验证后输出之间的契约。为相关产物命名,明确成功判定标准,杜绝无声的半完成状态。 需记录每次调用的工具名称、参数哈希值、延迟时间以及最终结果。没有这些记录,调试代理将陷入无止境的循环,耗费大量时间。 在处理“Why MCP”阶段时,首先需写下契约内容:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 应将配置信息置于应用程序代码之外。环境文件、密钥存储以及功能开关应集中存放于一处,以便操作员无需查看整个系统结构即可进行审计。

secscan_scan_har
HAR File
                 │
                 ▼
            MCP Server
                 │
                 ▼
          Security Scanner
                 │
                 ▼
          Security Findings
                 │
                 ▼
            AI Client
                 │
                 ▼
        Explain / Investigate

但你并不希望由人工智能来做出安全决策

“但你并没有……”这类表述作为可度量的指标来使用效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 同时记录正常流程和恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的一部分,而非后续需要补充的内容。 提供具有明确结构规范和清晰副作用标注的工具。主机需要在自动批准之前知道哪些调用会改变系统状态。

npm run gate -- test-results/network.har
AI-Assisted Analysis
HAR
 ↓
MCP
 ↓
AI
 ↓
Explain / Investigate / Triage
Deterministic Security Gate
HAR
 ↓
Scanner
 ↓
Critical Finding?
 ↓
FAIL BUILD

CI/CD的有趣之处

将 CI/CD 的阶段划分视为可度量的指标时,其效果最佳。在扩大范围之前,先记录一份理想的流程示例、一个失败案例以及回滚说明。 优先选择小型且可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应指向单一责任模块,而非复杂的流程链。 使用结构明确的工具,并为各种操作添加清晰的副作用标签。主机需要在自动批准之前知道哪些调用会改变系统状态。

- name: Run Playwright tests
  run: npx playwright test
- name: Security Gate
  run: npm run gate -- test-results/network.har
Code
 │
 ▼
Build
 │
 ▼
Playwright Tests
 │
 ▼
Capture HAR
 │
 ▼
Passive Security Scan
 │
 ▼
Security Gate
 │
 ▼
Deploy

你学到的最重要的一点

“The One of the Biggest”阶段若被视为可度量的界面,效果最佳。在扩大范围之前,需记录一份理想运行案例、一个失败案例以及回滚说明。 应将此阶段视为输入与已验证输出之间的契约。为相关成果命名,明确成功标准,绝不允许默许部分完成的情况。 需使用具有严格结构且带有明确副作用标签的工具。主机在自动批准之前必须知道哪些调用会改变状态。 “The One of the Biggest”阶段若被视为可度量的界面,效果最佳。在扩大范围之前,需记录一份理想运行案例、一个失败案例以及回滚说明。 配置应置于应用程序代码之外。环境文件、密钥存储及功能开关应集中存放,以便操作人员无需查看整个系统结构即可进行审计。

HAR
 │
 ▼
Parser
 │
 ▼
Transaction
 │
 ▼
Security Rules

接下来是什么?

在“下一步”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及错误消息处理都是产品本身的组成部分,而非后续需要补充的功能。 在网关处进行身份验证,在数据层再次授权。仅凭承载令牌并不能作为租户边界。

在更严格的安全规则阶段,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。相比庞大的脚本,应优先使用小型且可测试的单元。当某个步骤失败时,故障原因应能明确指向单一责任主体,而非复杂的流程链。应在网关处进行身份验证,在数据层再次进行授权——仅凭承载令牌并不足以界定租户边界。

更完善的报告功能

在For the Better报告阶段,修改代码之前需明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 应将此阶段视为输入与已验证输出之间的契约。为相关成果命名,定义成功检测标准,并拒绝默许的半完成状态。 在网关处进行身份验证,在数据层面重新授权。仅凭承载令牌并不足以界定租户边界。 在For the Better报告阶段,修改代码之前需明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将配置信息置于应用程序代码之外。环境文件、密钥存储以及功能标志应集中存放于一个操作人员可审计的位置,无需查看整个系统结构。

Finding
Severity
Rule
Evidence
Request
Response
Impact
Remediation

更完善的 AI 辅助分诊功能

在实现更完善的 AI 辅助分诊阶段时,首先需明确相关约定:所需输入参数、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 同时记录正常流程与异常恢复流程。重试机制、人工审核环节以及错误处理方式都是产品功能的一部分,而非后续需要补充的内容。 需为每次调用记录工具名称、参数哈希值、响应延迟及最终结果。没有这些记录,调试循环问题将会耗费大量时间。

CI/CD 集成

在处理 CI/CD 集成阶段时,首先明确相关约定:所需的输入参数、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改始终符合预期。 建议使用小型、可测试的单元而非庞大的脚本。当某个步骤失败时,故障应能指向具体的责任模块,而非整个复杂的流程。 需为每次调用记录工具名称、参数哈希值、延迟时间以及执行结果。没有这些记录,调试过程将会浪费大量时间。

你为何要构建这个系统

在完成“你为何构建此系统”这一阶段时,首先需写下相关契约:所需输入、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持透明可溯。 将这一阶段视为输入与经过验证的输出之间的契约。为相关产物命名,明确成功判定标准,杜绝无声的半完成状态。 需记录每次调用的工具名称、参数哈希值、延迟时间以及最终结果。没有这些记录,调试过程将会浪费大量时间。 在完成“你为何构建此系统”这一阶段时,首先需写下相关契约:所需输入、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持透明可溯。 应将配置信息置于应用程序代码之外。环境文件、密钥存储以及功能开关应集中存放于一处,以便操作人员无需查看整个系统结构即可进行审计。

更深层的理念

将“The Bigger Idea”阶段视为可度量的对象来处理效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。同时记录正常流程和恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的一部分,而非后续需要补充的内容。应提供具有明确结构规范和清晰副作用标识的工具,这样主机才能在自动批准之前知道哪些调用会改变状态。

QA Automation
      +
Application Security
      +
AI
      +
DevSecOps

最后思考

“最终思考”阶段若被视为可度量的工作面,效果最佳。在扩大范围之前,需记录一份理想运行示例、一个故障案例以及回滚说明。

操作检查清单

“操作检查清单”阶段若被视为可度量的工作面,效果最佳。在扩大范围之前,需记录一份理想运行示例、一个故障案例以及回滚说明。

在功能结果之外,还需记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。

为那些具有有限数据结构且带有明确副作用标签的工具提供接口。在自动批准之前,主机需要知道哪些调用会修改状态。

只要预算允许,就在持续集成过程中使用测试数据而非真实的付费 API 来执行关键路径的冒烟测试。

将配置信息与应用程序代码分开。环境文件、密钥存储以及功能开关应集中存放于一个位置,以便操作人员无需查看整个系统结构即可进行审计。

为那些具有有限数据结构且带有明确副作用标签的工具提供接口。在自动批准之前,主机需要知道哪些调用会修改状态。

在升级技术栈之前,先锁定各版本,为关键路径生成标准操作记录,并确认回滚步骤。共享环境需要设置速率限制、租户验证机制,以及明确的密钥轮换负责人。与其追求华丽的临时演示,不如注重扎实的可靠性。

关于8b0e77ff0645的批处理说明:不要将提供者密钥放入仓库中,设定每会话的令牌上限,并将转录内容存储在评估测试用例旁边,以便后续更换模型时仍能保持可比性。