最近看到一份报告,Veracode 2025 年发布的。
他们测了 100 多个大模型生成的代码,结论是:45% 的 AI 生成代码包含安全漏洞。
接近一半。
这个数字让我有点意外。不是说 AI 写代码又快又好吗?
其实仔细想想也合理。
大模型是怎么学会写代码的?从 GitHub 上几十亿行开源代码里学的。
问题是,这些开源代码本身就有大量不安全的写法。
AI 学会了写代码,也学会了写烂代码。
它不知道什么是安全,什么是不安全。它只知道"大家都这么写"。
更有意思的是具体的失败率。
SQL 注入?AI 防得还行。毕竟这个太经典了,教科书里写烂了。
但 XSS 跨站脚本攻击?失败率 86%。
日志注入?失败率 88%。
为什么差这么多?
SQL 注入有标准解法,用参数化查询就完事了。AI 背下来了。
但 XSS 和日志注入需要理解上下文。这个输出会显示在哪里?用户能控制哪些输入?
AI 不懂这些。它只会套模板。
还有个数据挺扎心的。
GitGuardian 统计发现,用 Copilot 的仓库,密钥泄露率比普通仓库高 40%。
不是 AI 故意泄露密钥。
是用了 AI 之后,人松懈了。
"反正 AI 写的,应该没问题吧。"
然后就不仔细看了。然后密钥就 commit 上去了。
有人说,那我让 AI 写完代码,再让 AI 检查一遍安全问题不就行了?
想法是好的。
但 Veracode 那份报告还有个发现:让 AI 在安全和不安全的写法之间选择,它有 45% 的概率选错。
掷硬币的水平。
你让它检查,它可能觉得不安全的代码挺安全的。
那怎么办?
我的建议是:把 AI 当结对编程的同事,别当自动驾驶。
同事写的代码你会直接 merge 吗?不会吧。你会 review。
AI 写的也一样。
几个具体建议:
1. 敏感代码自己写
认证、授权、支付这些逻辑,别让 AI 碰。或者让它写完你一行行看。
AI 最容易犯的错就是授权检查只放在前端、角色判断写死、信任用户传来的 ID。
2. 上 SAST 工具
就是静态代码扫描。CodeQL、SonarQube 这些。
让工具帮你兜底,别靠肉眼。
3. 别硬编码密钥
AI 特别喜欢把 API Key 直接写在代码里。
每次生成完,全局搜一下 key、secret、password、token 这些词。
4. commit 之前过一遍
别写完就提交。看一眼 diff。
很多低级错误扫一眼就能发现。
说到底,AI 编程工具确实提效。
但它是"快",不是"好"。
快和好不是一回事。
用 AI 写代码省下来的时间,拿去做 code review。
这样才不会给自己埋雷。