45%的AI生成代码有安全漏洞,你敢直接用吗
45%的AI生成代码有安全漏洞,你敢直接用吗
去年有个开发者用Lovable这个AI平台搭了个应用,没写过一行代码就上线了,还在社交媒体上炫耀。结果安全研究人员一扫,1645个应用里有170个存在数据泄露风险——用户姓名、邮箱、电话、支付信息、开发者API密钥全暴露在公网上。
这不是个例。另一个号称"零代码"做出来的应用,直接泄露了475万条记录,包括150万个API令牌。还有个AI生成的聊天应用,Firebase数据库的默认配置是`allow read: if true`——翻译一下就是:任何人都能读。
这些事让我认真去查了查AI生成代码的安全问题。查完之后说实话有点慌,因为数据比我想象的严重得多。
近一半的AI生成代码通不过安全测试
Veracode这家安全公司2025年做了一项测试,让100多个大模型完成80个编程任务,然后对生成的代码跑OWASP安全检测。结果:45%的代码没通过安全测试。另一家叫Checkmarx的公司做了独立评估,结果更夸张——70%。
具体到漏洞类型,分布大概是这样的:输入验证缺失(包括SQL注入和XSS)占22%,提示注入占19%,依赖幻觉占17%,密钥硬编码占15%,认证授权缺陷占14%,错误处理不当占13%。
有意思的是开发者对AI代码的信任度跟实际安全水平严重不匹配。Snyk的调查显示,超过75%的开发者认为AI生成的代码比人类写的更安全,但同时56%的人承认AI代码经常引入安全问题。更离谱的是,大约80%的开发者承认曾经绕过安全策略直接使用AI生成的代码。
觉得AI写的代码更安全——这个认知偏差本身就是安全风险。
哪些坑出现得比较频繁
我把常见的安全问题过了一遍,有几个是AI经常犯的。
SQL注入是老问题了。AI生成数据库操作代码的时候,倾向于用字符串拼接SQL而不是参数化查询。比如它可能给你写`db.QueryRow("SELECT * FROM users WHERE id = " + userID)`,这种代码二十年前就是教科书级别的反面案例了,但AI现在还在写。
XSS跨站脚本的失败率高得离谱——86%。AI生成的代码经常不对用户输入做HTML转义,直接输出到页面上。跟XSS相关的代码,只有12%到13%是安全的,也就是说十段里有八九段有漏洞。
硬编码密钥也很常见。API Key、数据库密码、JWT签名密钥直接写在代码里。这事儿不光是AI干得出来,人类开发者也常犯,但AI的问题在于它会从训练数据里搬一些真实的密钥过来,你不注意就用上了。
认证授权缺陷是Agent类工具出现比较多的问题。AI能写出功能完整的API接口,但经常漏掉权限校验——用户A的请求能直接访问用户B的数据。原因是AI缺乏对系统级权限意图的理解,它只关注功能能不能跑通,不关注谁能访问什么。
一个容易被忽略的新坑:包幻觉
这个风险很多人不知道,但我觉得挺重要的。
AI生成代码的时候会推荐你安装一些第三方依赖包,问题是——有些包根本不存在。AI从训练数据里"猜"出来的包名,听着像那么回事,但PyPI和npm里压根没注册过。
有人做了个大规模扫描,57万个代码样本中,19.7%引用了不存在的包。更麻烦的是,43%的幻觉包名在多次查询中是一致的——也就是说AI会反复推荐同一个不存在的包名。
这就给了攻击者一个可乘之机:他们去识别AI常推荐的那些不存在的包名,然后自己注册一个同名的恶意包。等你装上的时候,恶意代码就跟着进来了。这种攻击有个名字叫"Slopsquatting",是2025年新出现的一种供应链攻击。
所以以后AI建议你pip install什么包,先去PyPI查一下这个包到底存不存在。
迭代修改会让代码越来越不安全
这个发现让我挺意外的。有个研究让GPT-4o连续修改代码40次——这在日常开发中很常见,你不断让AI改bug、加功能、调样式——结果发现,只迭代了5次之后,代码库中的关键漏洞就比初始输出增加了37%。
每次修改都给了模型遗漏或改动安全逻辑的机会。第一次生成的代码可能还行,但你让它改来改去,安全相关的逻辑就被一点点磨掉了。它不是故意搞破坏,是改着改着就顾不上了。
这对日常开发的影响很直接——如果你习惯跟AI对话反复修改同一段代码,越改越不安全的概率比你以为的要大。
怎么用才安全
查完这些之后我调整了自己用AI写代码的习惯,大概有这么几条。
第一,AI生成的代码当作不可信输入来对待,不是当作可信输出直接用。就跟Code Review一样,别人提交的代码你不会直接合并,AI的也一样。逐行看一遍,理解每行在干什么,特别是数据库操作、认证授权、用户输入处理这几个地方。
第二,把安全扫描加到流程里。静态分析工具比如SonarQube、Semgrep、CodeQL能自动检测SQL注入、XSS这些常见漏洞。密钥扫描工具比如GitLeaks能扫出代码里硬编码的密钥。依赖验证——每次AI推荐你装新包,先验证一下这个包是不是真实存在的。这些工具配置一次就行,CI/CD流水线里加上,每次提交自动跑。
第三,安全相关的代码别全交给AI写。认证、支付、数据处理这些模块,AI生成之后必须人工审查,建议找人再过一遍。AI能帮你写个框架,但安全细节得人来把关。
第四,提示词里加安全要求。别只说"写个登录功能",加上具体要求:"用Flask写登录接口,密码用BCrypt哈希存储,登录失败5次锁定30分钟,JWT签名密钥从环境变量读取"。你把安全要求写进提示词里,AI会照着做,虽然还是得审查,但至少不会犯太低级的错。
第五,多模型交叉审查。这个技巧挺好用的——让一个模型生成代码,让另一个模型审查。Claude擅长安全场景推理,DeepSeek擅长链式思维分析复杂逻辑,不同模型互相查漏,比单模型自审有效得多。
企业用的合规问题
如果你在公司用AI编程工具,除了代码安全还有个合规问题要注意。
免费版和网页版工具的对话数据可能被用于模型训练——你把公司代码粘进去问问题,等于把代码上传到了别人的服务器。处理商业项目的时候,用API版本或者企业版本,起码有数据不用于训练的协议。
金融、医疗、政务这些行业有额外的合规要求。等保2.0、数据不出境、国密加密这些标准不是闹着玩的。如果是政企项目,通义灵码企业版或者文心快码企业版支持私有化部署,数据不出内网。涉密项目更严格,用CodeGeeX这类开源工具本地部署,完全离线跑。
还有个知识产权的问题。AI生成的代码版权归属目前法律上还有模糊地带,企业用的时候要记录代码来源、人工修改了哪些部分,万一以后有纠纷也有据可查。
说回那个问题
你敢直接用AI生成的代码上生产吗?
我的答案是:敢,但不能直接用。AI生成的代码可以上生产,但前提是过了安全审查这一关。就像你不会直接合并同事未经审查的代码一样,AI的代码也得过同样的流程。
AI编程工具确实能提升效率,但效率和安全不是对立的——你不做安全审查省下来的时间,迟早要在修漏洞、处理数据泄露事件的时候加倍还回来。那几个"零代码"上线的应用就是前车之鉴。
工具是工具,责任是你的。AI帮你写了代码,但如果出了问题,锅还是你的。
你在用AI写代码的时候,有没有遇到过安全问题?或者有什么自己做安全审查的经验?评论区聊聊。

