软件测试 |web 测试—截获和修改 POST 请求
问题
内置功能,比如 JavaScript 验证或文本长度限制,可能会禁止中规中矩的网页浏览器发送特定种类的恶意输入。但是,攻击者有许多种方法可用来绕过这些客户端的限制。为了测试这种情况,我们将向你演示如何从浏览器外部发送修改过的请求。
解决方案
启动 WebScarab 并配置 Firefox 用它作为代理(正如第 3 章所描述的那样)。登录你的应用并导航到你希望测试的功能。在你做好提交请求的准备但还没有提交的时候,打开 WebScarab。
在 WebScarab 中,通过 Internet 选项卡,单击“Intercept Requests”复选框。从此以后,WebScarab 将向你提示每个新页面或 AJAX 请求。它会询问你是否希望在请求发送到服务器之前对它进行编辑。注意,只有在你确认或拒绝请求之后,页面才会载入。
在“Edit Request”窗口中,你可以随意插入、修改或删除请求头。双击任意请求头即可开始修改——你甚至可以修改左侧的请求头名称。在图 5-1 中,你可以看到对 SSN 变量的修改。
另外,你可以通过 Raw 选项卡以纯文本形式编辑原始请求。这方便了对整个请求的复制和粘贴,这样你就可以在以后重复完全相同的测试。将请求粘贴到测试用例中来保存它,你就能够保存数据用于回归测试。
完成之后,你可以通过取消选中任何一个“Edit Request”窗口中的复选框来禁止对请求的截获。如果有许多等待中的请求,就可以使用“Cancel ALL Intercepts”按钮。
讨论
作为 Web 代理(有关 Web 代理的更多信息,看第三章),WebScarab 在数据离开你的浏览器但还没有到达服务器的时候对其进行截获和修改。通过在中途修改数据,它能够避开页面指定的所有限制或修改。
注意,启用“Intercept Requests”之后,在浏览时,每个新的页面都会启动一个“Edit Request”窗口。不要忘记取消选中“Intercept Requests”!如果你在完成之后忘记将它关闭,那么你必须来回单击几个 Edit Request 窗口,非常恼人。
注意,图 5-1 中的 SSN 变量传送了 5 个数字。而例 5-1 的 HTML 源代码将 SSN 域限制为 4 个字符,如图 5-2 所示。
在原本应该是 4 位数字的域中发送 5 位数字,这只不过是 WebScarab 使之成为可能的修改种类的一个例子。一旦你建立了提供不寻常数据的能力,就应该确保你的应用能够得体地处理这些异常。
WebScarab 允许你修改所有请求头,甚至是请求将被发送到的 URL.这使得它能够方便地同时修改 GET 和 POST 信息,这种功能是其他工具(比如 TamperData)所没有的。
谨慎使用 WebScarab
在你截获请求时,你是捕获到 AJAX 驱动的功能以及单独的表单提交。每个 AJAX 请求可以被单独截获和修改。记住,大量使用 AJAX 的站点会产生许多请求,有可能会爆炸式地弹出许多被截获请求窗口。
此外,使用 WebScarab 需要配置整个网页浏览器作为代理,而不是针对单个窗口、选项卡或站点。在有些情况下(Internet Explorer 或 Mac OS X 上的 Safari),你实际上是设计整个操作系统使用这个代理。这意味着每次软件更新检查,后台 HTTP 连接或者使用 HTTP 的应用会突然将自己的所有请求都通过 WebScarab 来发送,这可能是数量巨大的,而且它会妨碍你搜集与单个请求有关的数据的能力。
因而,在你使用 WebScarab 时,请确保尽量减少同时运行的其他使用 HTTP 的程序的数量(Adobe Reader、其他浏览器窗口、缺陷跟踪系统等等)。
评论