---
title: "什么是 Vibe-Coded 软件？"
canonical: https://wavect.io/zh/glossary/vibe-coded-software/
language: zh
description: "一款大部分由 AI 工具生成的 App，其安全关键路径没有任何人读过。它演示得很干净，崩坏得很可预测：缺失授权、未校验的输入、泄露的密钥。最常见的严重缺陷，是一个能用的登录界面，却没有任何服务端检查阻止用户 A 读取用户 B 的数据。"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

方法

# Vibe-Coded 软件

一款大部分由 AI 工具生成的 App，其安全关键路径没有任何人读过。它演示得很干净，崩坏得很可预测：缺失授权、未校验的输入、泄露的密钥。最常见的严重缺陷，是一个能用的登录界面，却没有任何服务端检查阻止用户 A 读取用户 B 的数据。

最近审阅: 2026-06-16 审阅人 [Christof Jori](/zh/team/christof-jori/) [wiki ↗](https://www.wikidata.org/wiki/Q139796367)

Vibe-coded 软件是 [vibe coding](/zh/glossary/vibe-coding/) 的产物：一款大部分由 AI 工具构建的应用，其中对安全要紧的部分没有任何人读过。它的定义不在于是 AI 生成的。它的定义在于，在那些一旦出错就会损失真实金钱、真实数据或造成真实泄露的路径上，缺少人工评审。大量 [AI 生成的代码](/zh/glossary/ai-generated-code/) 是经过评审、加固、完全安全的。Vibe-coded 软件是其中没有做这些的那个子集。

它的标志性特征是：演示得干净，崩坏得可预测。演示干净，是因为模型非常擅长让 happy path 跑起来，也就是你在演示里走的那条路。崩坏可预测，是因为故障每次都聚集在同样的那几个地方：只检查你是否登录、却不检查你是否有权看这条记录的授权；被信任而不是被校验的输入；硬编码或被发到浏览器的密钥；没有限流；除了一个通用 catch 之外没有错误处理。审计过一个 vibe-coded App 的人，在打开下一个之前就能猜到它的发现项。

举个例子，最典型的那个。一款订票 App 有一个干净的登录。进去之后，App 从 /api/bookings/1234 拉取你的订单。把 1234 改成 1235，你就看到了别人的订单，他的姓名、他的地址、他的支付凭证。登录让人感觉安全，所以没人去查。服务器从未验证过登录用户是否拥有 1235 这张订单。这叫做对象级授权失效（broken object level authorization）漏洞，它是 vibe-coded 软件里最常见的严重缺陷，因为演示从不会去走"一个用户去够另一个用户数据"这种情形。

诚实的取舍：vibe-coded 软件确实更便宜、更快产出，对一个原型来说这恰恰正确。代价是，省下的成本被提前了，而账单晚些才到，形式可能是一次泄露、一起 GDPR 事件，或一次重写。指出这一点不是反 AI 的清高。一旦把缺失的那 10% 补回来，代码可以完全没问题。错误在于把那 90% 上线，并假定演示已经证明了另外那 10% 的存在。

Wavect 在 [Software Quality Assurance](/zh/services/software-quality-assurance/) 下，正是按这个画像来审计 vibe-coded 软件。我们先读授权路径，因为最糟糕、最常见的漏洞就住在那里，然后是输入校验、密钥和错误处理，再补上回归测试套件，以及那道阻止下一次改动重新捅开窟窿的 [CI/CD](/zh/glossary/ci-cd/) 闸门。这不是重写。这是把工具留下的 [技术债](/zh/glossary/technical-debt/) 变得可见，然后偿还其中会伤到你的那一部分。

**在软件项目中何时最关键。** 当你有一个演示得很干净的应用、却没人读过授权路径时。决定性的风险不是代码差，而是在「出错就会赔上金钱、数据或一次泄露」的地方缺了人工审查。

**创始人通常会搞错什么。** 他们发布演示证明过的那 90%，并假设演示也证明了另外 10%。缺失的 10%，授权、校验、密钥，正是演示从不触及的那部分。

**Wavect 如何处理。** 我们按可预测的失败画像来审计，先做授权，因为最糟的漏洞住在那里，然后补上回归套件和阻止窟窿重开的 CI/CD 闸门。 [从 vibe-coded 原型到生产](/zh/software-development-guide/vibe-coded-prototype-to-production/) 指南讲清了什么可保留、什么需重建。

// FAQ

## 常见问题

### vibe-coded 软件里最常见的漏洞是什么？

一个能用的登录界面，却没有服务端授权。App 检查你是否登录，却不检查你是否有权看你请求的那条具体记录。改一下 URL 里的 ID，你就读到了另一个用户的数据。演示从不测试这一点，所以在被人利用之前没人会发现。

### 怎么判断一款软件是不是 vibe-coded？

去读授权路径。如果登录是唯一的访问检查，单条记录又不针对当前用户做校验，那它几乎肯定是 vibe-coded。其他迹象：密钥在客户端打包里、没有输入校验、一个通用的 catch-all 错误处理器，以及没有一套配得上这个名字的测试套件。

### vibe-coded 是不是就等于做得烂？

不是。它意味着没人读过安全关键路径。生成的代码在 happy path 上往往是干净、合理的。问题出在缺失的那 10%，也就是提示词从没要求过的授权、校验和密钥处理。把这部分补回来，同一份代码库就可以是可上生产的。

相关术语

- [Vibe Coding（凭感觉编程）](/zh/glossary/vibe-coding/)
- [AI 生成的代码](/zh/glossary/ai-generated-code/)
- [可上生产（Production-Ready）](/zh/glossary/production-ready/)
- [TDD](/zh/glossary/tdd/)
- [Technical Debt](/zh/glossary/technical-debt/)
- [SDLC](/zh/glossary/sdlc/)
- [CI/CD](/zh/glossary/ci-cd/)

相关服务

- [软件质量保障](/zh/services/software-quality-assurance/)

相关案例研究

- [Twinsoft AI](/zh/case-studies/twinsoft-ai/)

相关指南

- [软件开发流程：从首次通话到完整交接](/zh/software-development-guide/software-development-process/)

相关博客文章

- [为 AI 生成代码做 QA](/zh/blog/qa-for-ai-generated-code/)
- [Vibe-coded 软件审计](/zh/blog/vibe-coded-software-audit/)
- [从 Lovable/Cursor 原型到生产](/zh/blog/lovable-cursor-prototype-to-production/)

聊聊

## 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/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/zh/glossary/vibe-coded-software/#term",
      "@type": "DefinedTerm",
      "alternateName": [],
      "description": "一款大部分由 AI 工具生成的 App，其安全关键路径没有任何人读过。它演示得很干净，崩坏得很可预测：缺失授权、未校验的输入、泄露的密钥。最常见的严重缺陷，是一个能用的登录界面，却没有任何服务端检查阻止用户 A 读取用户 B 的数据。",
      "inDefinedTermSet": "https://wavect.io/zh/glossary/#termset",
      "name": "Vibe-Coded 软件",
      "termCode": "vibe-coded-software",
      "url": "https://wavect.io/zh/glossary/vibe-coded-software/"
    },
    {
      "@id": "https://wavect.io/zh/glossary/vibe-coded-software/#webpage",
      "@type": "WebPage",
      "about": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "author": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "dateModified": "2026-06-16",
      "description": "一款大部分由 AI 工具生成的 App，其安全关键路径没有任何人读过。它演示得很干净，崩坏得很可预测：缺失授权、未校验的输入、泄露的密钥。最常见的严重缺陷，是一个能用的登录界面，却没有任何服务端检查阻止用户 A 读取用户 B 的数据。",
      "headline": "Vibe-Coded 软件",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-06-16",
      "mainEntity": {
        "@id": "https://wavect.io/zh/glossary/vibe-coded-software/#term"
      },
      "mentions": [
        {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        {
          "@type": "Service",
          "name": "软件质量保障",
          "url": "https://wavect.io/zh/services/software-quality-assurance/"
        }
      ],
      "name": "Vibe-Coded 软件",
      "reviewedBy": {
        "@id": "https://wavect.io/team/christof-jori/#person",
        "@type": "Person",
        "name": "Christof Jori",
        "url": "https://wavect.io/team/christof-jori/"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".gls-single__h1",
          ".gls-single__tldr"
        ]
      },
      "url": "https://wavect.io/zh/glossary/vibe-coded-software/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/",
          "name": "首页",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/glossary/",
          "name": "技术、产品与合作模式术语表",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/glossary/vibe-coded-software/",
          "name": "Vibe-Coded 软件",
          "position": 3
        }
      ]
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "一个能用的登录界面，却没有服务端授权。App 检查你是否登录，却不检查你是否有权看你请求的那条具体记录。改一下 URL 里的 ID，你就读到了另一个用户的数据。演示从不测试这一点，所以在被人利用之前没人会发现。"
      },
      "name": "vibe-coded 软件里最常见的漏洞是什么？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "去读授权路径。如果登录是唯一的访问检查，单条记录又不针对当前用户做校验，那它几乎肯定是 vibe-coded。其他迹象：密钥在客户端打包里、没有输入校验、一个通用的 catch-all 错误处理器，以及没有一套配得上这个名字的测试套件。"
      },
      "name": "怎么判断一款软件是不是 vibe-coded？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "不是。它意味着没人读过安全关键路径。生成的代码在 happy path 上往往是干净、合理的。问题出在缺失的那 10%，也就是提示词从没要求过的授权、校验和密钥处理。把这部分补回来，同一份代码库就可以是可上生产的。"
      },
      "name": "vibe-coded 是不是就等于做得烂？"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
