---
title: "Vibe-Coded 软件审计 - 博客"
canonical: https://wavect.io/zh/blog/vibe-coded-software-audit/
language: zh
description: "你无法信任你从没读过的代码。这是 Wavect 对 vibe-coded 软件所做的结构化审计，我们最先检查的七件事，以及什么会卡住上线、什么可以等。"
image: "https://wavect.io/img/blog/headers/header_vibe-coded-software-audit.png"
---

[**返回**](/zh/blog/overview/)

[![Christof Jori](/img/team/christof.webp)](/zh/team/christof-jori/)

[Christof Jori](/zh/team/christof-jori/) https://linkedin.com/company/wavect

7 分钟 阅读 · 08 Jun 2026

[**下一篇**](/zh/blog/qa-for-ai-generated-code/)

# Vibe-Coded 软件审计：上线前会出什么问题

要点速览

你无法信任你从没读过的代码：vibe-coded 审计是对 AI 生成代码的结构化通读，专找模型跳过的风险，最常见的是缺失或只在前端的授权检查、可能写一半的数据、泄露的密钥、缺错误处理和零测试覆盖。发现按阻断级、高、清理项三档分类，交付一份发现报告加一个修好带测试的分支。一次审计从几天到约两周，先看代码再定范围；若核心数据模型本身就错了，重建比打补丁更便宜，我们第一通电话就会直说。

相关服务: [Vibe Coding Rescue](/zh/services/vibe-coding-rescue/)

你靠 prompt 做出了能跑的软件。它能注册用户、能显示正确的页面、demo 也好看。而你从没读过那段让它跑起来的代码。vibe-coded 审计正是为这种情形而生。其下那条让人不安却很简单的事实是：你无法信任你从没读过的代码。在真实金钱或真实用户碰到它之前，得有一个以读代码为生的人，去看模型实际写了什么，而不是看它看起来在做什么。

这不是反对用 AI 来构建。它比任何别的路都更快给了你一个产品。这是在说：要像审查任何即将保存客户数据、收取付款的东西那样，去审查这个产品。

## 什么是 vibe-coded 审计？

vibe-coded 审计，是对 AI 生成代码做一次结构化的通读，专门找模型跳过的那些风险。它不是功能评审。功能评审问的是"它做到用户想要的了吗"。审计问的，是 prompt 从没问过的那些问题：谁能读这些数据，这个调用失败时会怎样，这个密钥最后落到了哪里，从十个用户变成一千个用户时什么会崩。

这个区别很重要，因为这里的故障从外面看不见。产品看起来已经做完了。漏洞藏在没有任何 demo 会跑到的地方：网络掉线的那条路径、到达了两次的请求、改了 URL 去读别人记录的用户。我们读代码，就是为了在用户撞上之前先找到它们。

## vibe-coded 软件最先在哪里出问题？

每次审计都从同样的地方开始，因为 vibe-coded 软件总在同样的地方出问题。下面是我们最常揭出来的发现。

- **安全与授权。** 登录能用。那个阻止用户 A 读取用户 B 数据的检查缺失了，或者活在前端，谁都能绕过去。这是我们发现的最常见的严重问题，也是漏掉时代价最高的。
- **数据完整性。** 可能只完成一半的写入。一条记录存了下来，却没有它所依赖的那条对应记录。数据库其实无法保证的状态，于是数字随时间漂移，没人知道为什么。
- **泄露的密钥。** API key、数据库 URL 和 token 被硬编码进客户端代码，或被提交进仓库。模型把它们内联进去，因为这样示例才能跑。任何打开打包产物的人都能读到。
- **错误处理。** happy path 覆盖了。一次失败的调用、一次超时或一个空结果，就抛出未处理的异常，屏幕一片空白，没有提示，也无法恢复。
- **可扩展性与查询。** 把数据库调用塞进渲染里循环，或为了数行数而拉整张表。demo 里十条记录没事，生产里十万条就致命。
- **依赖与许可。** 过时、被弃用或带有已知漏洞的包，再加上那些悄悄禁止你所计划的商业用途的许可。
- **测试覆盖。** 通常一个都没有。没有任何东西阻止下一次改动，无论是不是 AI 写的，悄悄弄坏已经能用的部分。

![Christof Jori](/img/team/christof.webp)

"vibe-coded 软件的危险不在于代码差。在于没人读过它。信任是模型唯一给不了你的东西，而它恰恰是决定你能不能上线的唯一东西。"

## 哪些发现会卡住上线，哪些可以等？

不是每个发现都会拦住上线，把它们全当成会拦只会让你动弹不得。我们把找到的一切分进三个桶，好让你知道哪些今晚就修，哪些可以排期。

- **阻断级。** 任何会暴露客户数据、损失金钱或破坏状态的问题。一个坏掉的授权检查，或一个泄露的支付密钥，不会等。上线得等它。
- **高。** 还没咬人、但真实存在的风险。规模一上去就死的查询、支付路径上缺失的错误处理、带已知 CVE 的被弃依赖。在你长到那一步之前先修。
- **清理项。** 真实但能扛得住的债。不一致的模式、低风险输入上单薄的校验、稳定代码上缺失的测试。值得做，排期也安全。

这样划分，是为了对紧迫程度诚实。我们不会把一个清理项装扮成阻断级来注水工作量，也不会让一个真正的阻断级藏进一份长清单里。

## 审计之后你实际拿到的是什么？

交付的不是一份你无从下手的、满是抱怨的 PDF。它是两样东西。第一，一份发现报告：每个问题、它的严重度、它把什么置于风险之中，写得让一个非技术创始人也能判断什么要紧。第二，一个修好、带测试的分支：阻断级已关闭，高级别在范围允许处已处理，还有一套把这些修复钉在原地的回归套件。你拿回的是能跑的代码，而不是一份它为什么坏了的理由清单。如果你想要那一轮加固在底层是怎么跑的更深机制，我们在 [AI 生成代码的 QA](/zh/blog/qa-for-ai-generated-code/) 里讲过。

## 审计、完整 QA 还是重写：你需要哪一个？

这是三个不同的决定，而诚实的答案取决于这次通读读出了什么。

- **审计。** 当产品基本能用，而你需要在扩张或收款之前知道有什么藏着，这就是对的选择。快、聚焦，最后给出一份发现报告和一个修好的分支。
- **完整 QA。** 当产品已经真实且持续运行，这就是对的选择。一个由测试、评审和加固组成的常设流程，让下一次改动不会推翻上一次。审计往往是迈进它的第一步。
- **重写。** 有时通读会显示核心本身就错了，一个撑不起你所需的数据模型，或同一个坏模式被复制到了整个代码库。这种情况下，以 [定制软件开发](/zh/services/software-development/) 的方式重建核心，比永远打补丁更便宜，我们会在第一通电话里就这么说，而不是收你钱去修一个本该重新浇筑的地基。

## 一次 vibe-coded 审计要多少钱，要多久？

一次审计从几天到大约两周不等。这个范围是诚实的，不是搪塞，有两件事在移动它：代码库有多大，以及它触碰多少真实金钱或敏感数据。一个只读的内部工具落在短的一端。一个收款并保存个人数据的产品落在长的一端，因为那恰恰是需要最仔细通读的部分。我们在先看一眼之后再定范围，而不是在那之前，而且我们会把区间提前告诉你，而不是让你在账单上才发现。这是我们 [软件 QA 服务](/zh/services/software-quality-assurance/) 的入口。

## 最终思考

vibe-coded 软件不是更差的软件。它是没被读过的软件。模型自信地写了第一稿，跳过了没人去 prompt 的那些部分，而那些恰好是决定这东西能否扛住真实用户的部分。那份活儿没有消失。它在上线那天等着你，而那时它最贵，最难被发现。

如果你上线了某个你从没读过的东西，而金钱或用户马上要碰它，先找个人把它读一遍。一次审计就是几天，对上的是用最难的方式找出同样那些漏洞的代价，事故之后，而不是之前。

## 你可能也喜欢..

[**从 Lovable 与 Cursor 原型到生产** 一个周末做出的 AI 原型，如何变成你真正能上线的软件，以及夹在两者之间的那份活儿。](/zh/blog/lovable-cursor-prototype-to-production/) [**Wavect vs Dotbite** 对两家奥地利软件工作室的公允比较，以及哪一家更适合创始人主导的 AI 构建，哪一家更适合定制软件项目。](/zh/compare/wavect-vs-dotbite/)

QA 与生产就绪

## 继续浏览此集群

[从核心文章开始**AI 生成代码的 QA**](/zh/blog/qa-for-ai-generated-code/)

- [外部 QA 基准：软件产品前 30 天通常会发现什么](/zh/blog/external-qa-benchmark-first-30-days/)
- [软件上线后维护要花多少钱：DACH SaaS 基准](/zh/blog/software-maintenance-cost-benchmark-dach-saas/)
- [敏捷去工程化](/zh/blog/agile-de-engineering/)
- [Lovable、Bolt 和 Replit 应用尽职调查](/zh/blog/lovable-bolt-replit-app-due-diligence/)
- [Vibe-Code 生产就绪清单](/zh/blog/vibe-code-production-readiness-checklist/)

只收重要内容

## 关注与你相关的内容

每当我们发布新文章，你会收到一封简短邮件。你可以关注整个博客，也可以只选感兴趣的主题。

[**返回**](/zh/blog/overview/)

[![Christof Jori](/img/team/christof.webp)](/zh/team/christof-jori/)

[Christof Jori](/zh/team/christof-jori/) https://linkedin.com/company/wavect

7 分钟 阅读 · 08 Jun 2026

[**下一篇**](/zh/blog/qa-for-ai-generated-code/)

邮件订阅新文章 ×

×

通过邮件获取新文章

我们发布时给你一封简短邮件。免费，不做跟踪。

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/blog/vibe-coded-software-audit/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-07-07",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-07-07",
      "url": "https://wavect.io/zh/blog/vibe-coded-software-audit/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "你无法信任你从没读过的代码：vibe-coded 审计是对 AI 生成代码的结构化通读，专找模型跳过的风险，最常见的是缺失或只在前端的授权检查、可能写一半的数据、泄露的密钥、缺错误处理和零测试覆盖。发现按阻断级、高、清理项三档分类，交付一份发现报告加一个修好带测试的分支。一次审计从几天到约两周，先看代码再定范围；若核心数据模型本身就错了，重建比打补丁更便宜，我们第一通电话就会直说。",
  "articleBody": " 博客概览/交付与 QA/QA 与生产就绪 Vibe-Coded 软件审计：上线前会出什么问题 要点速览 你无法信任你从没读过的代码：vibe-coded 审计是对 AI 生成代码的结构化通读，专找模型跳过的风险，最常见的是缺失或只在前端的授权检查、可能写一半的数据、泄露的密钥、缺错误处理和零测试覆盖。发现按阻断级、高、清理项三档分类，交付一份发现报告加一个修好带测试的分支。一次审计从几天到约两周，先看代码再定范围；若核心数据模型本身就错了，重建比打补丁更便宜，我们第一通电话就会直说。 相关服务: Vibe Coding Rescue 你靠 prompt 做出了能跑的软件。它能注册用户、能显示正确的页面、demo 也好看。而你从没读过那段让它跑起来的代码。vibe-coded 审计正是为这种情形而生。其下那条让人不安却很简单的事实是：你无法信任你从没读过的代码。在真实金钱或真实用户碰到它之前，得有一个以读代码为生的人，去看模型实际写了什么，而不是看它看起来在做什么。 这不是反对用 AI 来构建。它比任何别的路都更快给了你一个产品。这是在说：要像审查任何即将保存客户数据、收取付款的东西那样，去审查这个产品。 什么是 vibe-coded 审计？ vibe-coded 审计，是对 AI 生成代码做一次结构化的通读，专门找模型跳过的那些风险。它不是功能评审。功能评审问的是\"它做到用户想要的了吗\"。审计问的，是 prompt 从没问过的那些问题：谁能读这些数据，这个调用失败时会怎样，这个密钥最后落到了哪里，从十个用户变成一千个用户时什么会崩。 这个区别很重要，因为这里的故障从外面看不见。产品看起来已经做完了。漏洞藏在没有任何 demo 会跑到的地方：网络掉线的那条路径、到达了两次的请求、改了 URL 去读别人记录的用户。我们读代码，就是为了在用户撞上之前先找到它们。 vibe-coded 软件最先在哪里出问题？ 每次审计都从同样的地方开始，因为 vibe-coded 软件总在同样的地方出问题。下面是我们最常揭出来的发现。 安全与授权。登录能用。那个阻止用户 A 读取用户 B 数据的检查缺失了，或者活在前端，谁都能绕过去。这是我们发现的最常见的严重问题，也是漏掉时代价最高的。 数据完整性。可能只完成一半的写入。一条记录存了下来，却没有它所依赖的那条对应记录。数据库其实无法保证的状态，于是数字随时间漂移，没人知道为什么。 泄露的密钥。API key、数据库 URL 和 token 被硬编码进客户端代码，或被提交进仓库。模型把它们内联进去，因为这样示例才能跑。任何打开打包产物的人都能读到。 错误处理。happy path 覆盖了。一次失败的调用、一次超时或一个空结果，就抛出未处理的异常，屏幕一片空白，没有提示，也无法恢复。 可扩展性与查询。把数据库调用塞进渲染里循环，或为了数行数而拉整张表。demo 里十条记录没事，生产里十万条就致命。 依赖与许可。过时、被弃用或带有已知漏洞的包，再加上那些悄悄禁止你所计划的商业用途的许可。 测试覆盖。通常一个都没有。没有任何东西阻止下一次改动，无论是不是 AI 写的，悄悄弄坏已经能用的部分。 \"vibe-coded 软件的危险不在于代码差。在于没人读过它。信任是模型唯一给不了你的东西，而它恰恰是决定你能不能上线的唯一东西。\" 哪些发现会卡住上线，哪些可以等？ 不是每个发现都会拦住上线，把它们全当成会拦只会让你动弹不得。我们把找到的一切分进三个桶，好让你知道哪些今晚就修，哪些可以排期。 阻断级。任何会暴露客户数据、损失金钱或破坏状态的问题。一个坏掉的授权检查，或一个泄露的支付密钥，不会等。上线得等它。 高。还没咬人、但真实存在的风险。规模一上去就死的查询、支付路径上缺失的错误处理、带已知 CVE 的被弃依赖。在你长到那一步之前先修。 清理项。真实但能扛得住的债。不一致的模式、低风险输入上单薄的校验、稳定代码上缺失的测试。值得做，排期也安全。 这样划分，是为了对紧迫程度诚实。我们不会把一个清理项装扮成阻断级来注水工作量，也不会让一个真正的阻断级藏进一份长清单里。 审计之后你实际拿到的是什么？ 交付的不是一份你无从下手的、满是抱怨的 PDF。它是两样东西。第一，一份发现报告：每个问题、它的严重度、它把什么置于风险之中，写得让一个非技术创始人也能判断什么要紧。第二，一个修好、带测试的分支：阻断级已关闭，高级别在范围允许处已处理，还有一套把这些修复钉在原地的回归套件。你拿回的是能跑的代码，而不是一份它为什么坏了的理由清单。如果你想要那一轮加固在底层是怎么跑的更深机制，我们在AI 生成代码的 QA里讲过。 审计、完整 QA 还是重写：你需要哪一个？ 这是三个不同的决定，而诚实的答案取决于这次通读读出了什么。 审计。当产品基本能用，而你需要在扩张或收款之前知道有什么藏着，这就是对的选择。快、聚焦，最后给出一份发现报告和一个修好的分支。 完整 QA。当产品已经真实且持续运行，这就是对的选择。一个由测试、评审和加固组成的常设流程，让下一次改动不会推翻上一次。审计往往是迈进它的第一步。 重写。有时通读会显示核心本身就错了，一个撑不起你所需的数据模型，或同一个坏模式被复制到了整个代码库。这种情况下，以定制软件开发的方式重建核心，比永远打补丁更便宜，我们会在第一通电话里就这么说，而不是收你钱去修一个本该重新浇筑的地基。 一次 vibe-coded 审计要多少钱，要多久？ 一次审计从几天到大约两周不等。这个范围是诚实的，不是搪塞，有两件事在移动它：代码库有多大，以及它触碰多少真实金钱或敏感数据。一个只读的内部工具落在短的一端。一个收款并保存个人数据的产品落在长的一端，因为那恰恰是需要最仔细通读的部分。我们在先看一眼之后再定范围，而不是在那之前，而且我们会把区间提前告诉你，而不是让你在账单上才发现。这是我们软件 QA 服务的入口。 最终思考 vibe-coded 软件不是更差的软件。它是没被读过的软件。模型自信地写了第一稿，跳过了没人去 prompt 的那些部分，而那些恰好是决定这东西能否扛住真实用户的部分。那份活儿没有消失。它在上线那天等着你，而那时它最贵，最难被发现。 如果你上线了某个你从没读过的东西，而金钱或用户马上要碰它，先找个人把它读一遍。一次审计就是几天，对上的是用最难的方式找出同样那些漏洞的代价，事故之后，而不是之前。 你可能也喜欢.. 从 Lovable 与 Cursor 原型到生产 一个周末做出的 AI 原型，如何变成你真正能上线的软件，以及夹在两者之间的那份活儿。 Wavect vs Dotbite 对两家奥地利软件工作室的公允比较，以及哪一家更适合创始人主导的 AI 构建，哪一家更适合定制软件项目。 QA 与生产就绪继续浏览此集群从核心文章开始AI 生成代码的 QA外部 QA 基准：软件产品前 30 天通常会发现什么软件上线后维护要花多少钱：DACH SaaS 基准敏捷去工程化Lovable、Bolt 和 Replit 应用尽职调查Vibe-Code 生产就绪清单 集群中的上一篇从 Lovable 和 Cursor 原型到生产：迁移清单集群中的下一篇为什么测试驱动开发值得投入 最合适的下一步： Vibe Coding 救援 软件 QA 软件开发 Fractional CTO AI 咨询 看看生产环境中的应用: Polity 先做决定: 如何把 vibe coding 出来的原型推向生产环境 只收重要内容 关注与你相关的内容 每当我们发布新文章，你会收到一封简短邮件。你可以关注整个博客，也可以只选感兴趣的主题。 Company 电子邮箱 你希望接收哪些内容？ 完整的 Wavect 博客接收六个主题下的每一篇新文章。 仅接收所选主题请在下方选择一个或多个分类。 选择主题 AI 与智能体 产品与 MVP 交付与 QA 领导力与团队 商业与监管 Web3 与隐私 我希望接收所选的 Wavect 博客邮件，并已阅读 隐私信息。我可以随时退订。 发送确认邮件→ 免费、双重确认、不使用跟踪像素。 ",
  "articleSection": "Engineering",
  "author": {
    "@id": "https://wavect.io/team/christof-jori/#person",
    "@type": "Person",
    "name": "Christof Jori",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796367",
      "https://www.linkedin.com/in/jocr77/",
      "https://github.com/jo-chris"
    ],
    "url": "https://wavect.io/team/christof-jori/"
  },
  "dateModified": "2026-07-07",
  "datePublished": "2026-06-08",
  "description": "你无法信任你从没读过的代码：vibe-coded 审计是对 AI 生成代码的结构化通读，专找模型跳过的风险，最常见的是缺失或只在前端的授权检查、可能写一半的数据、泄露的密钥、缺错误处理和零测试覆盖。发现按阻断级、高、清理项三档分类，交付一份发现报告加一个修好带测试的分支。一次审计从几天到约两周，先看代码再定范围；若核心数据模型本身就错了，重建比打补丁更便宜，我们第一通电话就会直说。",
  "headline": "Vibe-Coded 软件审计：上线前会出什么问题",
  "image": "https://wavect.io/img/blog/headers/header_vibe-coded-software-audit.svg",
  "inLanguage": "zh",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/zh/blog/vibe-coded-software-audit/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/zh/blog/vibe-coded-software-audit/",
  "wordCount": 178
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/overview/",
      "name": "博客概览",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/topics/delivery-qa/",
      "name": "交付与 QA",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/clusters/qa-production/",
      "name": "QA 与生产就绪",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/vibe-coded-software-audit/",
      "name": "Vibe-Coded 软件审计 - 博客 | ",
      "position": 5
    }
  ]
}
```
