去年秋天,注入测试我们团队接手了一个电商后台系统。注入测试上线第三天,注入测试运营在群里发了一张截图:某个用户的注入测试购物车金额变成了负数。不是注入测试显示错误,是注入测试数据库里真实存着 -37.5 元。排查了一圈,注入测试问题出在优惠券叠加逻辑上——满减和折扣同时触发时,注入测试代码把优惠金额算了两遍。注入测试但真正让我意外的注入测试,是注入测试测试环境里这个场景从来没被覆盖过。
这就是注入测试注入测试要解决的事。不是注入测试等 bug 自己冒出来,而是注入测试主动往系统里塞“脏东西”。
我最早接触这个概念是注入测试在一个支付网关项目里。当时有个同事,每天下班前会写一段脚本,随机往订单接口里丢各种畸形数据:金额传负数、货币代码填“ABC”、用户 ID 塞一个 10KB 的字符串。刚开始大家都觉得他多此一举。直到某天凌晨,线上真的出现了一笔金额为 0.0000001 元的交易,风控系统直接卡死。那之后,我们把这个习惯保留了下来。
注入测试的核心动作很简单:构造非预期输入,观察系统反应。但“非预期”三个字比想象中宽泛。拿一个登录接口来说,常规测试会验证正确密码能登录、错误密码被拒绝。注入测试会问:密码字段传一个数组会怎样?传 null 呢?传一个 2MB 的 emoji 字符串呢?用户名里带 SQL 关键字呢?这些不是边界值分析能覆盖的——边界值分析假设输入是“合理的数字”,而注入测试直接打破这个假设。
我见过最离谱的一个案例,来自某 SaaS 产品的导出功能。正常流程是用户勾选几条记录,点导出,生成 CSV。测试同学写了个脚本,把记录 ID 参数改成
1 OR 1=1。结果系统返回了全库数据。更糟的是,这个接口没有做权限二次校验,任何登录用户都能拿到别人的数据。修复只用了二十分钟,但发现它的那个注入用例,价值远超整个季度的功能测试。做注入测试不需要复杂的工具。Postman 的 Pre-request Script 里写几行随机化逻辑,或者用 Python 的 hypothesis 库自动生成异常输入,甚至手动改几个参数就能开始。关键不在于技术门槛,而在于思维方式——你得暂时放下“用户会正常操作”的预设,把自己当成一个故意找茬的人。
当然,注入测试不是银弹。它产生的告警噪音可能很大,需要配合日志过滤和断言机制。我通常建议团队先从一个接口试点,把发现的真实问题记录下来,用案例说服其他人。当开发看到自己写的代码在空字符串面前直接 500,那种冲击比任何测试规范文档都管用。
回到开头那个负数购物车。后来我们加了一条注入用例:在优惠计算接口里随机传入 0、-1、NaN 和超大浮点数。两周后它又抓到一个问题——当折扣率传 0 时,系统会除以零。这次修复只花了五分钟,因为测试环境已经提前暴露了它。
系统不会自己告诉你它有多脆弱。你得主动去戳它。
顶: 14376踩: 335






评论专区