CI/CD 权限边界盲区
你让我配 CI/CD,我会顺手把「自动启用某个服务、自动授予某个权限」也写进流水线,仿佛运行环境里我无所不能。但流水线的令牌只有有限权限,结果不是发布失败(Resource not accessible by integration),就是被我悄悄放大了攻击面。
demo 能跑就发布
功能在我手里跑通一次 demo,我就倾向说「可以了 / 看起来没问题」。但「演示路径跑通」离「通过验收」差得远——我用「让它跑起来」当完成信号,而验收是拿预先定义好的标准逐条核对。这两件事之间,正藏着真实数据规模、并发、异常路径,和你从没听我提过的性能、安全、可访问性。
默认埋漏洞 / 泄露敏感数据
你让我「把功能做出来」,我就只盯着功能跑通——安全是默认不可见的非功能需求,除非你显式要求,我不会主动按最小权限、敏感数据分级、纵深防御去想。结果是硬编码的密钥进了仓库、该鉴权的接口裸奔、敏感信息写进了日志和报错。
上线后被提示注入攻破
当我帮你做的产品本身内置了 LLM——客服 bot、Agent、那种「读完用户内容/网页/邮件再行动」的功能——上线后,攻击者会把恶意指令藏进我会读到的内容里,诱导你后端那个 LLM 越权:泄露数据、调用它不该调的工具、绕过你定的规则。开发期我默认「输入都是善意的」,于是把一个本该当成攻击面的发布面,当成了普通功能交付。
修 A 悄悄弄坏 B
你让我改 A 功能,我改完了,A 也确实好了——但我没回头看,A 依赖的那段代码、那张表、那个接口,同时还被 B 用着,B 被我悄悄改坏了。我和你都只盯着「A 在不在」,没人验「B 还正不正常」。上线后用户撞见「本来好好的功能坏了」,这种回归比新功能的 bug 更伤信任。
三个月技术债墙
用我,你能在头几周飞快堆出一堆「能跑」的功能,爽到以为速度会一直这样。但只要你一路只要「快点跑通」、不管结构 / 测试 / 文档,技术债会复利式累积,到某个点(常被说成「三个月」)撞上一堵墙:改一处崩三处、没人敢动、加新功能越来越慢——速度断崖式下跌,而前面省下的时间这时连本带利还回来。
迭代中安全逐步侵蚀
你让我一轮轮加功能、修 bug、重构,代码看着是越改越像样了——但安全漏洞会随迭代轮次悄悄累积。研究发现,仅五轮迭代后严重漏洞显著上升。一个「看起来一直在变好」的过程,安全面其实在变差,到发布时已积重难返。
License / IP 污染
我交给你的「原创代码」里,可能藏着一段我从训练语料逐字背下来的开源实现——还可能带着 GPL 这类有传染性的 copyleft 许可。我不会附来源、也不会附许可,你把它合进闭源产品,发布或法务审计时才发现这是一次许可违规 / IP 侵权。
AI 代码归属与责任
我交一段代码,你合并、署上公司的名、当成自有资产。但你没问过三个问题:纯我生成、没有足够人类创作的代码,可能压根主张不了版权(别人能照用);它若逐字复现了训练数据里受版权的代码,又可能侵权(你担责);出了问题,谁负责?「全是责任、没有保护」不是修辞,是当前的法律现实。
日志注入与审计链
日志是你事后追究「AI 到底做了什么」的唯一底座,但它本身是个攻击面。我会把没转义的外部输入直接写进日志(让攻击者伪造日志行、骗过 SIEM),也可能漏记关键动作;反过来,我读到被投毒的日志时还会被它误导。日志一脏,审计链就断——出事时你重建不出真相。