有人在搜索框里输了一句话,你的数据库就没了。
先讲三个真实到不能再真实的故事:
- 故事一:官网查订单的输入框,有人输了一段奇怪字符——整张用户表被下载走了。(这叫注入)
- 故事二:论坛有人发了条评论,所有点开的人几分钟内账号全被登录,发帖人一行服务器代码没写。(这叫 XSS)
- 故事三:后台网址
xxx.com/order?id=1001,用户把 1001 改成 1002,看到了别人的订单——含手机号和地址。(这叫越权)
它们听起来很”黑客”,根源只有一句话:你把用户输入,当成了自己人。
这一篇不教你当安全专家,只教你两件事:知道雷埋在哪,以及让 AI 帮你逐个入口体检。
一、三个词,一句话说清楚
| 名字 | 一句话解释 | 打个比方 |
|---|---|---|
| 注入 | 用户输的字,被当成命令执行了 | 收件人栏写了”把仓库钥匙给他”,仓管照做了 |
| XSS | 用户输的字,被当成网页代码执行了 | 留言板贴了”看到的人请把钱包交出来”,别人真照做 |
| 越权 | 换个 ID 就看到别人的数据 | 房卡只认门牌号,改个号就进别人房间 |
共同点:注入和 XSS 都是”用户输入的东西跑到了不该跑的地方去执行”;越权是”只查了他要什么,没查他配不配拿”。

二、安全的唯一心法:所有输入都是敌人
所有用户输入,默认都是恶意的。
注意”所有“和”默认“。
所有 = 不只是显眼搜索框,还包括:
- 网址参数
- 表单每个格子(哪怕是”备注”)
- 上传的文件名
- 接口每个字段
- 甚至 Cookie 和 Header
默认 = 不用”发现他是坏人才防”,而是先当坏人,除非验证通过。思路一转,后面全通。
三、排查四步:列、追、验、补
安全排查落到操作上就四步:列、追、验、补。

第一步:列 —— 列出所有入口
把你项目里所有用户能往里塞东西的地方写出来:
- 登录框、注册框、搜索框、评论、个人资料编辑
- 文件上传
- 网址所有参数
- 所有对外接口
最容易漏的是”网址参数”和”接口”——不显眼,页面上看不见。
第二步:追 —— 每个入口的东西流去哪
问一句:用户输的东西最后跑到哪了?
| 流向 | 会出什么事 | 对应漏洞 |
|---|---|---|
| 进数据库查询 | 被当成 SQL 命令执行 | 注入 |
| 原样显示在页面 | 被当成网页代码执行 | XSS |
| 变成文件名/路径 | 覆盖/读走服务器文件 | 路径穿越 |
| 拼进系统命令 | 直接控制服务器 | 命令注入(最要命) |
| 只是存起来 | 相对安全,但取出显示时还要防 XSS | —— |
“追流向”恰好是 AI 最擅长的——它读代码追调用链比肉眼快得多。
第三步:验 —— 试一下真能打进来吗
不用写攻击代码,三个经典测试输入能试出绝大多数低级漏洞:
| 测什么 | 往输入框填 | 出现什么=有问题 |
|---|---|---|
| 注入 | 1' or '1'='1 |
只该查一条却全查出来,或报一大段数据库错误 |
| XSS | <b>粗体测试</b> |
页面真显示成加粗(标签被执行了) |
| 越权 | 把网址 id 改成别的数字 | 看到别人的数据 |
第二个最温柔也最有效:填 <b>粗体测试</b>,原样显示文字=安全(被转义),显示成加粗=有 XSS 风险。三十秒一眼看出。
第四步:补 —— 三招对症下药
记三个字:参、转、白。
| 招 | 用在哪 | 说人话 |
|---|---|---|
| 参 | 数据进数据库 | 参数化查询,别把用户输入用字符串拼进 SQL |
| 转 | 数据显示到页面 | 转义输出,把 < > 变普通字符,别用 innerHTML 直接塞 |
| 白 | 数据变成文件名、命令、跳转地址 | 白名单:只许我列的几种,其余一律拒绝 |

白名单是安全里最重要的思维:黑名单(”这些不许”)永远列不全,攻击者总能找到你没想到的;白名单(”只有这些可以”)默认拒绝,才安全。比如上传文件,别写”不许传 .exe”,要写”只许传 .jpg 和 .png”。
四、越权:最易忽略,也最易发生
注入和 XSS 至少听说过。越权是新手最常踩、后果最直接的——因为它不需要任何技术,改个数字就行。
检查越权问四个问题,按顺序:
| 问 | 问题 | 举例 |
|---|---|---|
| 一问 | 这接口要不要登录 | 订单详情肯定要 |
| 二问 | 登录了要不要看角色 | “删除用户”只有管理员能干 |
| 三问 | 角色对了,是不是他自己的数据 | 这问最常漏! 张三登录了,订单 1002 是李四的 |
| 四问 | 前端把按钮藏了,后端有没有拦 | 藏起来 ≠ 拦住了 |
第三问和第四问是 90% 越权事故来源。 尤其是第四问:很多人以为”前端判断了普通用户看不到删除按钮就删不了”——错。 前端代码在用户浏览器里,他想改就能改,安全校验只有写在后端才算数。
铁律:前端做的所有限制,都只是”提升体验”,不是”安全防护”。
五、让 AI 帮你排查,注意两个坑
坑一:AI 只能看见你给的那点代码。 你贴一个函数问”有没有安全问题”,它看不到被谁调用、参数从哪来、别处是否已过滤。解法:贴代码时顺手说清三件事:
- 这段代码干啥
- 参数从哪来
- 结果去哪
不说就只能泛泛而谈。
坑二:AI 特别爱说”看起来没有明显的安全问题”。 这等于没说。解法:用”验伪追问”逼它表态:
“假设你是攻击者,给我一个能真正打进来的具体输入值,写清往哪个框填什么、填完发生什么。构造不出就明确说’我构造不出攻击输入’。”
这一问下去,AI 要么给具体攻击串(真有洞),要么明确认输(可信度高)。能构造出具体攻击方式的”有问题”,才是有价值的结论。
六、上线前五分钟自查清单
除三大漏洞,还有几个”低级但致命”的问题,每次上线前花五分钟过一遍:
| # | 检查项 | 怎么查 |
|---|---|---|
| 1 | 密码、密钥有没有写死在代码里 | 全局搜 password、secret、key、token,看有无明文 |
| 2 | 密钥有没有提交到仓库 | 就算删了,历史记录还在,必须换掉 |
| 3 | 报错信息会不会返给用户 | 故意制造错误,看页面是否露出代码路径和堆栈 |
| 4 | 默认密码改了没 | admin/admin——扫描器几秒试出来 |
| 5 | 后台管理页有没有裸奔 | 不登录直接访问后台地址,看能不能进 |
| 6 | 依赖库有没有已知漏洞 | 跑依赖检查,高危的升级掉 |
| 7 | 用户密码是不是明文存的 | 数据库能直接看到密码 = 重大事故 |
第 3 条特别说:报错信息返给用户是个隐蔽坑。 详细报错会暴露框架、版本、表名、服务器目录——都是攻击者最想要的情报。正确做法:给用户看”操作失败,请稍后重试”,详细报错记到服务器日志。

七、提示词模板盒子
模板 1:单个入口安全体检(最常用)
请帮我做一次安全排查。
【这段代码是干什么的】处理【商品搜索】的后端接口
【用户输入从哪来】参数 keyword 是搜索框直接输入的,前端没过滤
【数据流向哪】keyword 用来查数据库,结果直接显示在搜索结果页
【技术栈】(语言/框架/数据库,如 Node.js + Express + MySQL)
【代码】(粘贴完整代码,不要只贴片段)
请按格式回答:
1. 安全问题清单,按严重程度排序(高危/中危/低危)
2. 每个问题写清:什么漏洞、攻击者怎么利用(给真实输入示例)、后果
3. 每个问题给修复后的完整代码,别只说"应该做过滤"
4. 认为没问题就明确说"我构造不出攻击输入",别说"看起来还行"
模板 2:列出所有入口(排查第一步)
我要给项目做安全排查,第一步找出所有"用户能输入东西的地方"。
【项目是做什么的】(一句话)
【已有的页面/功能】(如:登录、订单列表、上传合同、用户管理)
请帮我:
1. 列出这类项目通常有的所有入口,分四类:表单 / URL参数 / 文件上传 / 接口字段(含Header/Cookie)
2. 每个入口标注:输入最可能流向哪(数据库/页面/文件/命令)、对应什么风险
3. 按"最该优先检查"排序并说明原因
4. 指出新手最容易忘查的入口
模板 3:越权四问自查
请检查这个接口有没有越权风险。
【接口做什么】根据订单ID返回详情,地址 /order/detail?id=1001
【当前权限逻辑】(做了什么写什么,没做就写"没做")
【代码】(粘贴)
请按四问逐条回答"做了/没做/做得不对":
1. 有没有校验"必须登录"
2. 有没有校验"角色权限"
3. 有没有校验"数据是不是当前用户自己的"
4. 有没有把校验只写在前端、后端漏了
对每个"没做/不对"的,给:攻击者具体操作步骤 + 修复后的完整代码。
模板 4:逼 AI 表态(验伪追问)
你刚才说这段代码"看起来没有明显的安全问题"。
现在切换成攻击者视角,做一件事:给我一个具体的、能真正打进来的输入值——写清往哪个输入框/参数填什么、填完发生什么。
规则:
- 不许说"可能存在风险"这类模糊表述
- 不许列与本代码无关的通用建议
- 确实构造不出就明确说"我构造不出攻击输入",并说明靠什么机制挡住的
八、一页纸总结
- 三大漏洞一句话:注入=输入被当命令;XSS=输入被当网页代码;越权=改个 ID 看到别人数据。
- 唯一心法:所有用户输入默认都是敌人。URL 参数、上传文件名、接口字段全算。
- 排查四步:列、追、验、补。 关键在”追”——用户输的东西最后流去哪。
- 补漏三招:参、转、白。 进数据库用参数化、进页面要转义、变文件名/命令用白名单。
- 白名单 > 黑名单。 别写”不许传 .exe”,要写”只许传 .jpg 和 .png”。
- 越权四问:要不要登录 → 要不要看角色 → 是不是他自己的数据 → 前端藏了后端拦没拦。后两问是 90% 事故来源。
- 前端限制不是安全防护,只有后端校验才算数。
- AI 说”看起来没问题”不作数,用验伪追问逼它给具体攻击输入。
- 上线前七连查:密钥、仓库、报错、默认密码、后台裸奔、依赖漏洞、明文密码。
下篇预告
这一篇讲”防坏人”。下一篇讲“防自己”——你自测十遍没事,用户第一天就点崩:输个空格、贴个表情、填个 0,程序当场崩。人天生想不到那些奇怪输入,而这恰恰是 AI 最强的地方。下一篇《第89篇:用AI生成测试用例与边界》给你”边界九宫格”和一套把边界一网打尽的提示词。我们下篇见。