p.7方法⏱ 约 4 分钟
陷阱 #7:不做输入校验
只考虑"正常输入",一遇意外就崩
🔎 最后验证 2026-05📚 来源:《AI编程实战三卷书》卷二 §8–12、《AI编程实战三卷书》卷三🧰 Claude Code✅ 87 人学过👁 150 次阅读
为什么学这个
上一节讲的注入,是"不校验输入"的恶性版本。这一节讲它的日常版:AI 写的代码默认所有人都会乖乖输入正确的东西,于是空值、负数、超长文本、错误格式一来,它就崩、或算出离谱结果。
💡 打个比方
就像设计一个表单只想着"用户会填真实姓名",却没想过有人填空、填一万个字、填表情符号。现实世界的输入千奇百怪,不设防的程序,迟早被一个意外输入绊倒。
这个坑长什么样
// AI 只考虑了"正常情况"(❌)
function setAge(age) {
user.age = age; // 没校验:传 -5、"abc"、空,全照单全收
}
// 转账金额没校验 → 有人转 -100 元,反而把钱转给了自己
亲手喂它'脏输入':下面这个转账函数只想着正常情况。运行看看——有人转 -100,余额不减反增(等于偷钱)!然后试着在开头加一行校验 if (amount <= 0) return "金额非法",再运行,看它能不能挡住:
✍️ 动手写代码在浏览器里真实运行 · 安全沙箱
不校验输入的代码,正常用没事,一遇到恶意/异常输入就出大问题(这里是被'转负数'白偷了钱)。
为什么会犯 & 怎么识别
- 为什么:它优先让"主流程(happy path)"跑通,默认输入都合法(下一节'偷工减料'会更系统地讲)
- 识别信号:函数一上来就直接用参数,没有任何"是不是空、类型对不对、范围合不合理"的检查
怎么防
- 入口处先校验:函数/接口拿到输入,先问"它合法吗?"——空?类型?范围?格式?
- 明确非法时怎么办:报错?给默认值?提示用户?别让非法输入静悄悄往下跑
- 审查清单里固定一项(还记得 m.7 吗):"空输入、超大、负数、错误格式,会怎样?"
❓ 测验
一个处理用户输入的函数,最该先做的是?
⚠️ 避坑校验要放在'后端/服务端',只靠前端等于没防
还记得 P2 说的吗:前端的校验用户能绕过(改浏览器、直接发请求)。AI 有时只在前端加校验就交差,真正的把关必须在后端再做一遍。涉及金额、权限、数据写入的,服务端校验不能省。
🤖 让 AI 补齐输入校验(收藏)
请为这个函数/接口补上完整的输入校验:考虑空值、类型错误、超出合理范围、格式非法等情况,并明确每种非法输入该如何处理(报错/默认值/提示)。如果涉及安全或金额,请在服务端校验。改完逐项说明你加了哪些校验。
🔎 来源与核验· 1 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「缺少输入校验会导致崩溃与错误结果;应在入口(尤其服务端)校验合法性」
📚 《AI 编程实战三卷书》卷二 §8–12 / 卷三✓ 已核验 2026-05
🔧 试一试:给它的函数喂脏输入(5 分钟)
让 AI 写个处理输入的函数,然后故意喂它空值、超长字符串、特殊符号、负数。
你会看到:它写的多半只考虑了正常输入,一喂脏的就崩或给错结果。
怎么防:要求它「对输入先校验再处理」;边界输入自己主动测一遍。
✅ 小结
不校验是"做得太少"。下一节是它的反面——AI 也会"做得太多":过度工程,把简单问题搞复杂。
下一节 → 陷阱 #8:过度工程

都看到这了,打个赏呗!
接下来 · p.8
陷阱 #8:过度工程
继续读下一节 →