91年34岁程序员:这个低级错误,我敢断定你今年至少犯过三次

14 阅读5分钟

你是不是也有过这种经历? 测试接口时,脑子里突然闪过一个念头:“用张三的权限,去拿李四的数据,会怎样?” 下一秒,你就安慰自己:“前端按钮都灰了,文档也写了内部调用,谁这么无聊?算了,肯定没事。” 然后你安心点了上线。结果深夜,报警响了。

你看着 “越权访问” 的日志,真想坐时光机回去,给测试时的自己一耳光:“我当时明明想到了啊!”

别抽自己,是你的大脑在坑你。

这真不是粗心。我们大脑里有个 “节能模式”,叫系统 1(快思考) 。它的任务就是用最少的能量,快速做判断。 怎么快?靠老经验。你做过十个类似接口都没出事,这次它一看:“场景熟悉,安全!” 顺手就把那个 “费脑子” 的怀疑给屏蔽了。 这个状态,就叫 “想当然” 。它很省力,但专坑程序员。

Image

所以,测试时那个 “一闪而过” 的念头,是最宝贵的风险提示。 但靠 “灵光一现” 来保证安全,就像把家门钥匙藏脚垫下 —— 今天记得,明天可能就忘了。 我们缺的,是一套不靠灵感、只认动作的固定流程


从 “我觉得” 到 “我做了”,你只差一张清单

清单就是你的 “防呆手册”。它强迫大脑从 “自动巡航” 切换到 “手动驾驶”,不听 “我觉得” 的忽悠,只认打勾✅。 下面这五条 “接口防呆启动清单”,测任何涉及权限和数据的接口时,都请像开机自检一样跑一遍:

  1. “陌生人敲门” 测试:不传或乱传 Token,接口是返回 “401 未授权”,还是放他进来了?
  2. “张冠李戴” 测试:登录张三,参数却传李四的 ID,接口是严厉 “403 禁止”,还是把李四家底交出来?
  3. “平民闯皇宫” 测试:普通用户去调管理员接口,是不是被拦在门外了?
  4. “暴力搞破坏” 测试:参数传负数、超长字符串、奇怪字符,接口是崩溃报 500,还是优雅拒绝?
  5. “有没有多嘴” 测试:接口返回的数据列表里,有没有不小心把别人的手机号、身份证号也塞进去了?

Image

别嫌麻烦。 就把这张图存手机里,或打印贴屏幕上。下次测试前,别想,直接照着一条条执行、一条条打勾。做完这五项,你这个接口的 “防盗门” 才算装上。 我同事老王,就是靠这份清单,逮住了一个重大漏洞。他当时在测一个查询接口,清单做到第二条 “张冠李戴” 时,发现传别人 ID 竟然能查到数据!而之前,他完全 “想当然” 地以为这个关联逻辑绝对可靠。


最高明的防护:让错误 “想犯都犯不了”

清单虽好,但总要人记着执行。人一忙一累,就可能忘记。 有没有更绝的办法?有。最高级的防护,不是反复提醒你 “记得锁门”,而是把门设计成 —— 你不锁就关不上。 这叫 “防呆”(Fool-Proof)设计。核心就一句:假设人一定会犯错,然后用机制把路堵死。

给你两个马上能用的 “防呆小仪式”: 第一,在代码里埋一根 “红线”。 去找你们项目全局处理请求的地方(拦截器、过滤器或 AOP)。在这里,加一段强制逻辑,比如:“凡是查询用户数据的请求,自动比较参数里的用户 ID 和 Token 里的 ID,不一致直接 403 返回,请求根本不到业务代码!” 把规则从靠人记忆的 “道德规范”,升级成框架自动执行的 “法律”。这样,就算下次你 “想当然” 了,代码也会拉你一把。

Image

第二,在评审时加个 “找茬环节”。 提测前,别光问 “你看我代码怎么样”。拉上搭档,花五分钟玩个游戏:“现在,我是想搞破坏的黑客 / 调皮用户,你猜我会怎么弄你这个接口?” 互相问:“如果我伪造 Token 呢?”“如果我并发狂调用,把你拖垮呢?” 这个外部视角,能瞬间打破你的思维盲区。把这些新想到的 “骚操作”,立刻变成你清单上的新条目。


总结一下,告别 “想当然” 错误的三层防护: 第一层: 抓住测试时飘过的任何怀疑念头,先记下,别分析。 第二层: 用 “防呆五条” 清单,把模糊的怀疑变成必须执行的动作。 第三层: 通过代码强制校验和 “找茬评审”,建立让错误难以发生的机制。

最后,留个互动题: 上面说的 “想当然” 时刻,你中过哪几条?来评论区认领你的 “人设”:

  1. “前端有控” 党:坚信前端按钮灰了,后端就高枕无忧。
  2. “文档写了” 党:以为标注 “内部接口”,就真的没人从外头调。
  3. “历史经验” 党:这类接口以前没出事,所以这次肯定也没事。
  4. “我全中” 党:别问了,都是我的泪…(欢迎补充你的专属踩坑姿势)

在评论区打出你的数字,看看有多少战友和你一样。 点赞最高的那条,我送你一份完整的大厂晋升指南。