基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
  • 知识卡片碎片时间过考点
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
    • AI 热点每日 AI 资讯与动向
AI 工作台
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
9.0
重磅
AI SCORE
技术实践2026-08-04 03:03

AI 编程工具在生产中遗留的隐患代码

dev.to · AI#AI编程#代码审查#安全
Editor brief · 编辑速览

AI 代码助手生成包含调试语句、硬编码凭证、注释掉的安全检查等脚手架,这些在开发时合理但生产环境成为漏洞,常规 code review 无法捕获。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

每个 AI 编码 Agent 在生产环节留下什么

每个 AI 编码助手都会产生两种输出:解决问题的代码,以及解决过程中积累的脚手架。Debug 打印语句把请求对象转储到标准输出。在本地运行时有效的硬编码数据库 URL。被 AI 在原型设计过程中绕过的注释掉的 @require_login 装饰器。这些工制物既不会导致测试失败,也不会触发 linter。但它们会被发布到生产环境。

问题不在于 AI 助手编写不安全的代码。问题在于它们生成的是可以运行的代码,但内部嵌入了开发阶段的快捷方式,而典型的代码审查流程中没有人在寻找这些快捷方式。

AI 在代码库中留下的四类工制物

AI 编码助手会生成可工作的代码,但也会生成脚手架工制物——debug 打印语句、占位符凭据、注释掉的安全检查、硬编码的 localhost 端点——这些在开发时是合适的,但当代码发布时就成了生产隐患。BrassCoders 的 12 个扫描器可以捕获安全相关的子集:硬编码凭据、debug 模式配置标志和与已知密钥格式匹配的占位符值。

Debug 打印语句单独来看风险最低——除非它们在打印密码、令牌或 api_key。硬编码凭据处于中等风险:静态值不太可能轮转,造成的损害受凭据作用域限制。比如 Django 的 DEBUG = True 设置可能会暴露堆栈跟踪、禁用安全头、绕过缓存逻辑。注释掉的安全控制风险最高。注释掉的 @require_login 装饰器意味着开发者在开发期间绕过了一个控制,而 AI 保留了这个绕过。

OWASP 将 debug 模式配置错误和不安全的默认设置分类到 A05:安全配置错误,在 2021 年的十大风险中排名第五。这种模式在使用 AI 辅助构建的代码库中反复出现,因为这些助手优先考虑生成能运行的代码,而不是能安全发布的代码。

为什么代码审查持续忽略这些问题

BrassCoders 将硬编码凭据和 debug 模式指标标记为其密钥和安全扫描的一部分,但代码审查遗漏工制物有一个结构性原因:审查者阅读相对于之前存在内容的差异,而 AI 生成的代码以一大块形式到达,其中工制物淹没在工作逻辑中变得不可见。

审查由 Claude Code 或 Cursor 生成的 300 行 PR 的审查者在评估逻辑是否正确、函数签名是否合理、测试是否覆盖边界情况。要在一个设置文件中的第三个文件中发现 DEBUG = True——在助手搭建配置时添加的——需要一种不同的注意力。审查者不会自然地在"这是否有效"和"助手是否留下了脚手架"之间切换。

这些工制物也被意图所伪装。硬编码的 postgres://localhost/dev 连接字符串看起来是有意的——它很具体、格式正确、某个时刻可能是有意的。diff 中没有任何东西表明它是应该是环境变量的开发占位符。代码审查会捕获看起来不对的东西。AI 脚手架往往看起来完全正确。

无法扩展的 Grep 方法

grep -r 'print|TODO|FIXME|localhost|debug' 扫描可以单独找到工制物,但会产生虚警,使信号失去意义——日志工具中的合法打印语句、测试配置中的有效 localhost 引用、文档中的 TODO。BrassCoders 的扫描器应用特定于模式的上下文来区分凭据形状的字符串和偶发匹配。

Yelp 的 detect-secrets(捆绑在 BrassCoders 中)在凭据层处理此问题。它对字符串字面量运行熵分析,并根据已知密钥格式进行匹配——AWS 访问密钥、GitHub PAT、Stripe 实时密钥、Slack 令牌、PEM 私钥、JWT。熵阈值过滤掉仅仅看起来像凭据的低熵字符串。虚警率下降到信号可操作的范围。

AI 模式扫描器添加第二遍来处理与已知凭据格式模式匹配的占位符值,但不是真实的密钥。AI 助手生成 FastAPI 示例时可能会写 api_key = "sk-1234567890abcdef"——不是真正的 OpenAI 密钥,但形状完全一样。扫描器会标记它。开发者验证并在占位符到达某个 PR 之前将其删除,在那里有人可能会将其误认为真实的密钥。

BrassCoders 确定性地标记什么

BrassCoders 的密钥模式扫描器捕获任何格式中的硬编码 API 密钥和令牌;安全扫描器标记 Django 设置中的 DEBUG = True 和其他配置反模式;AI 模式扫描器标记与已知凭据格式匹配的占位符值。

将 BrassCoders 添加到 CI,它在每次提交后运行:

pip install brasscoders
brasscoders scan .

输出是由你的 AI 审查者消费的 YAML 文件——Claude Code、Cursor 或你正在运行的任何助手。YAML 首先呈现工制物发现,包括扫描器名称、文件路径、行号和对标记内容的描述。你的 AI 审查者看到结构化列表,可以进行分类,而无需扫描整个代码库以查找脚手架。

BrassCoders 在发布的基准中捕获了 12 个 AI 生成的 bug 中的 11 个,相比之下单独使用 Bandit 只有 6 个。工制物类别——debug 模式配置、占位符凭据、注释掉的控制——属于这 11 个。Bandit 捕获它被设计来查找的安全模式。自定义扫描器捕获 Bandit 不是为了查找的 AI 特定脚手架模式。

覆盖范围的差距不是关于扫描器质量。而是关于每个扫描器被构建来检测什么。BrassCoders 在一次通过中编排全部 12 个,包括六个为 AI 生成的代码模式专门构建的自定义扫描器。OSS 核心是免费的,并采用 Apache 2.0 许可证。它以一个命令开始。

如需进一步采取行动,你可能需要阻止此人和/或举报滥用

Original source

本文由 AI 翻译整理,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
GitHub评论可直接触发Copilot自动化
下一篇
README 文档成为 AI Agent 的隐蔽攻击面

资讯速览

dev.to · AI · 2026-08-04 03:03

AI 评分 9.0 / 10

相关标签

#AI编程#代码审查#安全

继续阅读

  • 自修复 Agent:从错误检测到自动验证的完整闭环
  • GitHub评论可直接触发Copilot自动化
  • README 文档成为 AI Agent 的隐蔽攻击面
  • AI 助手生成的 Pydantic v1 代码为何在 v2 中失效
  • OWASP Agent 安全框架:从 LLM 风险到自主 AI 系统