设计单变量改动,就是在网站漏洞检测流程中一次只改变一个条件,并保留改动前后的完整证据,用来判断某个现象究竟由什么引起。具体做法是:先锁定一个待验证的假设,只调整与它直接相关的一个变量,其余配置、扫描范围、请求参数和检测时间尽量保持一致,然后对比改动前后的结果。如果结果变化,说明该变量与现象相关;如果不变,就不能把原因归到它身上。
单变量改动的前提是有明确假设。比如检测中发现某类页面反复出现异常响应,可能的解释有很多:参数拼接方式不同、身份状态不同、访问频率不同、扫描器规则版本不同。这些解释不能同时测试,否则结果无法归因。
可以按下面的顺序收敛假设:
判断标准很直接:如果无法说清“改什么、不改什么、看什么结果”,就还不适合开始单变量测试。
网站漏洞检测中的变量往往不止一个。要让单变量改动有效,需要固定以下内容:
如果某一项无法固定,比如目标站点在测试期间发生了发布,那么本轮结果只能作为线索,不能当作确定结论。此时应记录干扰因素,并安排下一轮复测。
单变量改动不是只做一次就下结论。更稳妥的做法是设置对照:一组保持原状,一组只改一个变量,然后分别执行并记录结果。若两组结果一致,说明该变量可能不是关键;若两组结果稳定不同,才值得进一步确认。
重复次数取决于现象是否稳定。偶发异常需要更多次重复,并记录每次的响应状态、响应长度、关键字段和时间戳。对于无法稳定复现的现象,可以先把它标记为“未定位”,不要强行归因。
这里要区分“可能原因”和“已经定位的原因”。单变量改动只能帮助你排除或缩小范围,不能仅凭一次差异就证明因果。只有多个对照轮次都指向同一变量,并且排除了其他已固定条件的变化,结论才更可靠。
每一轮单变量改动都应留下可复核的记录,至少包括:
记录时不要只保留截图。截图难以检索和比对,最好同时保留文本形式的请求、响应摘要和检测日志。这样下一轮调整假设时,可以直接回看哪一项已经排除。
如果现象涉及多个相互依赖的条件,比如权限、参数和频率必须同时满足才出现,强行拆成单变量可能一直复现不了。这时可以先做小范围组合测试,确认大致方向后,再回到单变量逐一排除。另一种情况是目标系统不允许频繁请求,或者测试会影响线上业务,此时应降低频率、缩小范围,或改用本地复现环境。
选择步骤可以归纳为:先写假设,再固定条件,然后只改一个变量,设置对照并重复,最后记录证据并判断是否支持假设。下一步,挑一个当前最想排除的原因,按这个流程做一轮最小改动测试,并把结果与原始现象并排比对。