一、开发任务

我在团队中主要负责渐进式上下文补全、大模型调用、漏洞解释生成、修复建议输出,是连接后端规则分析与前端插件展示的核心环节。AI 模块的稳定性、准确率和响应速度,将直接决定项目最终能否达到可演示、可考核、可验收的标准。

本次开发核心任务:漏洞检测结果展示优化,检出漏洞后新增展示漏洞类型 + 简介 + 修改方法,满足课堂演示需求,帮助初学者快速理解漏洞问题、风险及修复方案。

二、需求目标

  1. 升级漏洞检测结果展示逻辑,不再仅展示「是否有风险」;
  2. 检测出漏洞后,自动展示漏洞类型、简短漏洞介绍、修改方法三类核心信息;
  3. 降低初学者理解成本,明确告知「问题是什么、为什么危险、怎么改」。

三、开发范围与文件改动

1. 核心改动文件

表格

文件路径改动类型核心作用
vscode-extension/src/extension.ts功能增强新增风险详情格式化逻辑,实现通知弹窗、输出面板的漏洞类型 / 简介 / 修改方法展示
vscode-extension/out/extension.js编译产物更新TypeScript 编译后的运行文件,与源码同步,支撑扩展实际功能
vscode-extension/out/extension.js.map调试文件更新源码映射文件,方便调试定位 TypeScript 源码问题

2. 无破坏性变更说明

  • 后端接口无任何修改,沿用原有AnalyzeResponse.risks[]字段;
  • 插件兼容后端旧响应,无新增字段时自动展示前端兜底内容,不影响原有功能。

四、核心功能实现

1. 前端展示效果(变更后)

(1)通知弹窗(showInformationMessage)
  • 保留原有「检测摘要 + 风险等级 + 耗时」基础信息;
  • 存在漏洞时,追加首条漏洞完整信息首个漏洞:<类型>;简介:<简述>;修改方法:<建议>

(2)输出面板(Output Channel)
  • 保留原有「漏洞位置 / 类型 / 严重程度」展示;
  • 每条漏洞新增一行详情简介:...|修改方法:...
  • 多条漏洞逐条展示,支持逐项排查。

2. 核心代码实现(extension.ts)

本次新增 5 个核心工具函数,支撑漏洞信息格式化与展示:

  • formatRiskDetailZh():拼接单条漏洞的简介 + 修改方法,统一输出格式;
function formatRiskDetailZh(risk: Record<string, unknown>): string {
  const intro = buildRiskIntroZh(risk);
  const fix = buildRiskFixZh(risk);
  return `     简介:${intro}|修改方法:${fix}`;
}
  • formatFirstRiskBriefZh():生成通知弹窗中首条漏洞的摘要信息;
function formatFirstRiskBriefZh(risk: Record<string, unknown>): string {
  const type = riskTypeZh(String(risk.type ?? ""));
  const intro = buildRiskIntroZh(risk);
  const fix = buildRiskFixZh(risk);
  return `首个漏洞:${type};简介:${intro};修改方法:${fix}`;
}
  • buildRiskIntroZh():生成漏洞简短介绍,针对SQLInjection提供固定中文介绍;
function buildRiskIntroZh(risk: Record<string, unknown>): string {
  const rawType = String(risk.type ?? "");
  if (rawType === "SQLInjection") {
    return "外部输入被直接拼接到 SQL 语句中,攻击者可能构造输入绕过校验或读取/篡改数据。";
  }
  const reason = normalizeTextField(risk.reason);
  return reason || "该位置存在潜在安全风险,请结合上下文进一步确认。";
}
  • buildRiskFixZh():按优先级生成修改方法,兼容后端返回值与前端兜底;
function buildRiskFixZh(risk: Record<string, unknown>): string {
  const best = normalizeTextField(risk.fix_best);
  if (best) {
    return best;
  }
  const minimal = normalizeTextField(risk.fix_minimal);
  if (minimal) {
    return minimal;
  }
  const rawType = String(risk.type ?? "");
  if (rawType === "SQLInjection") {
    return "改为参数化查询,不要通过字符串拼接构造 SQL;同时对输入做白名单校验。";
  }
  return "优先采用安全 API,避免把外部输入直接拼接到执行语句。";
}
  1. normalizeTextField():统一处理后端可选字符串字段,过滤空白内容,保证展示整洁。
function normalizeTextField(v: unknown): string {
  return typeof v === "string" ? v.trim() : "";
}

3. 字段优先级策略

(1)修改方法优先级

后端fix_best(最优方案) > 后端fix_minimal(最小修改方案) > 前端内置默认建议

(2)漏洞简介优先级

SQLInjection固定中文模板 > 后端返回reason字段 > 前端通用兜底文案

五、开发与验证步骤

1. 编译打包

进入vscode-extension目录,执行编译命令:

npm run compile

执行后自动更新extension.jsextension.js.map文件。

2. 功能验证

  1. 准备包含已知漏洞(如 SQL 注入)的测试代码;
  2. 运行插件执行代码分析;
  3. 验证两项核心效果:
    • 通知弹窗正常显示「首个漏洞:类型 + 简介 + 修改方法」;
    • 输出面板每条漏洞均附带「简介 / 修改方法」信息,格式正确、内容完整。

六、开发总结

  1. 本次开发不影响原有接口、不破坏现有功能,兼容新旧后端响应;
  2. 完成了漏洞检测结果的信息升级,补充了漏洞简介和修改方法,大幅提升了插件的教学实用性;
  3. 新增工具函数模块化设计,逻辑清晰,便于后续维护和扩展其他漏洞类型的展示逻辑;
  4. 验证通过,功能正常运行,满足课堂演示和初学者使用需求。
  5. 返回的修改建议还有一点语言问题,明天看看改一下再传git。不出意外下次更新应该是跨文件上下文补全,最近再看看怎么做。

顺便提醒一下git里面最新版不在主分支,pull下来改的时候记得切换分支,要不合起来比较麻烦。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐