← 返回目录
p.6方法⏱ 约 5 分钟

陷阱 #6:引入注入类安全漏洞

把用户输入直接拼进去,等于开后门

🔎 最后验证 2026-05📚 来源:《AI编程实战三卷书》卷三🧰 Claude Code✅ 91 人学过👁 163 次阅读
为什么学这个

AI 写的代码常常"对正常用户能跑",却对恶意用户敞开大门。最典型的就是注入漏洞:把用户输入不加处理地拼进数据库查询或页面里,攻击者就能借此偷数据、改数据、甚至控制你的站。

💡 打个比方

这就像门卫照着访客自己填的纸条放行:正常人填名字,坏人填"放我进金库"。如果你不验证、直接照做,等于把安全交给了对方的善意——而坏人从不善意。

这个坑长什么样

// SQL 注入(❌):把用户输入直接拼进查询
const q = "SELECT * FROM users WHERE name = '" + userInput + "'";
// 用户输入 ' OR '1'='1  →  查询变成"返回所有用户",密码全泄露

// XSS(❌):把用户输入直接塞进网页
element.innerHTML = userInput;
// 用户输入一段 <img src=x onerror="恶意代码">  →  图片加载失败触发 onerror,在别人浏览器里执行恶意脚本
// (注:直接塞 <script> 标签经 innerHTML 并不会自动执行,真实攻击多走 onerror/onclick 这类事件)

亲眼看注入怎么发生:下面把用户输入直接拼进 SQL 查询。正常用户没问题;但当用户输入 ' OR '1'='1 时,运行看看拼出来的查询变成了什么——它不再是"查某个人",而是"返回所有人":

✍️ 动手写代码在浏览器里真实运行 · 安全沙箱
看清楚:同一段拼接代码,恶意输入让查询的含义被彻底篡改了。这就是注入。

为什么会犯 & 怎么识别

  • 为什么:直接拼接最简单、演示也能跑;AI 默认走了"能用"的捷径,没考虑恶意输入
  • 识别信号:看到用户输入被字符串拼接进 SQL、命令、HTML;没有"参数化""转义""校验"的影子

怎么防

  • 永远不要信任用户输入:一切外部输入都当"可能是恶意的"
  • 用安全的方式:数据库用参数化查询(占位符),不手拼;往页面放内容用安全 API(避免 innerHTML 直插)
  • 审查时专门问一句:"这里的用户输入,如果是恶意构造的,会发生什么?"
❓ 测验
处理用户输入时,安全的核心原则是?
⚠️ 避坑'我的小项目没人攻击'是危险的侥幸

新手常觉得"我这小破站谁会黑"。但攻击大多是自动化扫描——机器人无差别地扫全网漏洞,不在乎你大小。只要上线、只要有输入口,就可能被打。养成处理输入的安全习惯,从第一个项目开始,别等出事才学。

🤖 让 AI 安全地处理输入(收藏)
这段代码会接收用户输入。请检查并修改:1) 数据库操作改用参数化查询,不要字符串拼接;2) 输出到页面的内容做必要的转义,避免 XSS;3) 对输入做基本校验。改完请说明每处防的是什么攻击。
🔎 来源与核验· 1 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「未校验/直接拼接的用户输入会导致 SQL 注入、XSS 等漏洞,应参数化与校验」

🔧 试一试:让它写段拼 SQL 或命令的代码(5 分钟)

让 AI 写一段根据用户输入查数据库、或拼一条 shell 命令的代码。

你会看到:它常常直接字符串拼接用户输入——经典的注入漏洞。

怎么防:要求参数化查询/转义;凡把用户输入拼进 SQL/命令/HTML 的地方都当高危审。

✅ 小结

注入是"不信任输入"的反面教材。下一节把这个原则讲透:全面地说说"不做输入校验"会出哪些事。

下一节 → 陷阱 #7:不做输入校验
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · p.7
陷阱 #7:不做输入校验
继续读下一节 →