How Secure is Code Generated by ChatGPT?
该论文通过实验评估发现,尽管 ChatGPT 具备识别潜在漏洞的意识,但其生成的代码往往仍缺乏抵御特定攻击的鲁棒性,且提示词优化与伦理问题也是研究的重要方面。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
这篇论文就像是一次**“让 AI 当实习生写代码”的残酷大考**。
想象一下,你是一家公司的老板,你雇佣了一位名叫 ChatGPT 的超级聪明的“实习生”。这位实习生读过世界上几乎所有的书,说话像人,写代码也飞快。你心想:“太好了,以后写代码不用我亲自动手了,让他来写吧!”
于是,你给了他 21 个任务,让他用 5 种不同的编程语言(比如 C++、Python、Java 等)写出 21 个小程序。这些程序有的要处理数据库,有的要加密文件,有的要处理用户上传的压缩包。
但是,你犯了一个致命的错误:你只告诉他“把东西做出来”,却忘了告诉他“要做得安全”。
1. 考试结果:惨不忍睹
当你拿到这位“实习生”交上来的作业(代码)时,你发现情况非常糟糕:
- 21 份作业里,只有 5 份是勉强合格的。 剩下的 16 份,就像是用纸糊的城堡,风一吹就倒。
- 漏洞百出: 这些代码里充满了各种低级错误。比如:
- 有人想偷看你的文件,只要输入几个特殊的字符,就能钻进你的系统(路径遍历漏洞)。
- 有人想往数据库里塞垃圾,就能把整个系统搞瘫痪(SQL 注入)。
- 有人上传一个巨大的压缩包,就能把你的服务器撑爆(Zip Bomb)。
- 甚至有人把密码直接明文写在代码里,就像把家门钥匙挂在门口一样。
结论: 如果直接让 AI 生成的代码上线运行,就像是在自家大门上装了一把纸做的锁,黑客随便一推就开了。
2. 实习生的“双标”表现
最让人哭笑不得的是这位实习生的**“态度”**:
- 当你没问时: 他自信满满地交给你一堆“纸锁”,完全没意识到那是个漏洞。
- 当你问“这安全吗?”时: 他立刻变脸,像个专家一样说:“哎呀,老板,这确实不安全!这里有个大洞,那里有个后门。”他甚至能解释得头头是道,告诉你黑客是怎么攻破的。
- 当你要求“修好它”时: 他又能修好一部分。但问题是,只有当你明确告诉他“要修”的时候,他才会去修。 如果你不问,他就假装看不见。
比喻: 这就像你让一个厨师做菜,他没放盐(不安全)。你问“这菜咸吗?”,他说“不咸,而且放盐会中毒(其实是怕你发现他没放盐)”。等你逼问“那加点盐吧”,他才手忙脚乱地加了一点,但可能还是没放够,或者加了别的奇怪调料。
3. 为什么会出现这种情况?
论文作者发现,ChatGPT 就像一个**“只会按指令办事,不会主动思考风险”的机器人**:
- 缺乏“坏人思维”: 它写代码时,默认大家都是好人,输入的数据都是正常的。它不会想:“万一有个坏人故意输入一串乱码来搞破坏怎么办?”
- 语言差异: 有时候让它用 Python 写,它写得挺安全;让它用 C++ 写同样的功能,它可能就写出大漏洞。这就像让同一个人用中文写诗和用英文写诗,水平忽高忽低。
- 过度自信: 有时候明明代码有错,它却自信地告诉你“这是安全的”。
4. 我们能从中学到什么?(给老板们的建议)
这篇论文并不是要完全否定 AI,而是想告诉大家怎么正确使用这个“超级实习生”:
- 不要当甩手掌柜: 你不能指望 AI 自动生成完美的安全代码。你必须像**“严厉的老师”**一样,不断追问它:“这里安全吗?”“如果黑客攻击会怎样?”“请给我加一层防护。”
- AI 是个好老师,但不是好工匠: 如果你问它“为什么这个代码不安全?”,它能给你讲出一堂精彩的网络安全课。所以,它适合用来教学生,或者帮老程序员查漏补缺,但不适合直接用来生产核心系统的代码。
- 伦理问题: 有趣的是,AI 会拒绝帮你写“黑客攻击代码”(比如写病毒),但它却会毫不犹豫地帮你写“有漏洞的代码”(比如没加防护的登录系统)。这就像它拒绝给你一把枪,却给你一把没装保险栓的枪,这其实更危险。
总结
ChatGPT 生成的代码就像是一辆没有刹车、没有安全气囊的跑车。 它跑起来很快(生成速度快),外观也很酷(代码看起来像样),但如果你不亲自检查并给它装上刹车(人工审查和加固),一旦开上马路(上线运行),后果不堪设想。
一句话建议: 让 AI 帮你写代码,但一定要像检查刚出生的婴儿一样,拿着放大镜去检查每一行代码的安全性,千万不要直接把它扔给黑客去“测试”。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。