写点什么

软件测试 | 测试对 URL 长度的处理

  • 2023-08-26
    北京
  • 本文字数:1988 字

    阅读完需:约 7 分钟

更多学习资料戳!!!

问题

你的应用可能无法很好地处理个别 POST 参数,你也应该检查应用对特别长的 URL 的处理方式。HTTP 标准(RFC 2616)中没有限制 URL 的长度。相反,有可能发生的的情况是你的系统中某些其他方面可能会加以限制。你需要确保以限制的方式是可预测并可接受的。

解决方案

有几种方案可以测试超长的 URL。最简单的方法是预先生成这些 URL,然后使用 cURL 或 wget 这样的命令行工具来获取。对本解决方案而言,假设我们有一个基于 GET 的应用,它显示天气报告,使用邮政编码作为参数。正常的 URL 会像这样:http://www.example.com/weather.jsp?zip=20170。我们推荐两种用于生成超长 URL 的策略:在末尾放置伪造参数和在开头处放置伪造参数。它们具有不同的可能出现的结果。注意,在这个秘诀中我们将演示一些特别长的 URL,但是因为打印页面的特性,这些 URL 可能会显示为若干行。URL 中不能包含换行符。在测试中,你必须将这些 URL 合并成单个长字符串。

末尾处的伪造参数

在合法的 URL 末尾增加很多很多的参数,并将合法参数放在最前边。参数要使用我已但无意义的名称,而这些参数的取值要使用有效但无意义的值。这种策略的例子有:

http://www.examlp.com/weather.jsp?zip=20170&a000001http://www.wxamlp.com/weather.jsp?zip=20170&a000001=z000001&a000002=z000002http://www.example.com/weather.jsp?zip=20170&a000001=z000001&a000002=z000002&a000003=z000003
复制代码

开头处的伪造参数

一种类似的策略是在合法参数之前放置越来越多的无关参数,使得合法参数在 URL 中的位置越来越靠后。这种策略的例子有:

http://www.example.com/weather.jsp? a000001=z000001&zip=20170http://www.example.com/weather.jsp?a000001=z000001&a000002=z000002&zip=20170http://www.example.com/weather.jsp?a000001=z000001&a000002=z000002&a000003=z000003&zip=20170
复制代码

为了便于使用,我们编写了一个 Perl 脚本,它能生成这种类型的 URL。它显示在例 5-3 中。要定制它,可以修改脚本顶部的 $BASEURL,$PARAMS,$depth 和 $skip 变量。

例 5-3:用于生成长 URL 的 Perl 脚本

#!/usr/bin/perl
$BASEURL="http://www.example.com/weather.jsp";$PAPAMS=zip=20170";
$If $strategy == "prefill",then the bogus parameters will come before the $ legit one above. Otherwise,the bogus paramters will com after.$strategy = "prefill";
#How many URLs to generate. Each URL is 16 characters longer than the one# before it. With $depth set to 16,the last one is 256 characters in the # paramters. You need to get up to depth 256 to get interesting URLs(4K# or more)$depth = 256;
# How many to skip,each time through the loop.If you set this to 1,when# you have $depth 256,you`ll get 256 different URLs, starting at 16 characters# and going on up to 4096.If you set $skip to 8,you`ll only get 32 unique# URLs (256/8),because we`ll skip by 8s.$skip = 8;
for(my $i = 0;$i< $depth;$i += $skip){ #build one URL`s worth of paramtes $bogusParms="";for( my $j = 1;$j <=$i;$j++) { $bogusParms.= sprint("a%0.7d=z%0.7d&",$j,$j); }if($strategy eq "prefill"){ $url = $BASEURL . "?" . $PAPAMS . "&" . $PAPAMS;}else{ # use substr() to strip the trailing & off the URL and make it legit. $url = $BASEURL . "?" .$PAPAMS . "&" . substr($bogusParams,1,-1);}print "$url\n";}
复制代码

讨论

这些 URL 将测试若干件事,而不仅仅是你的 Web 应用。它们会测试 Web 服务器软件。应用服务器(例如,WebLogic,JBoss ,Tomcat 等等),还可能包括在这两者之间包含的所有基础设施(例如,反向代理,负载均衡器等等)。你甚至可能会发现,你的网络管理员因为入侵检测系统(IDS)开始不断弹出警告而烦恼。重要的是,要尽可能让这种行为仅限于针对你的 Web 应用。或者通过查看日志,或者通过仔细观察它的行为来确定它正在做什么。

你将会遇到哪些限制?在尝试着测试自己的 Web 应用的限制时,你会在许多地方遇到各种限制。Thomas Boutell 在网上汇集了一份列表:http://http://www.boutell.com/newfaq/misc/urllength.html,下面是他所找到内容的一小部分:

Unit 或 Cygwin 命令行(更确切地说,bash shell 程序的命令行)限制智能有 65536 个字符。要提交更长的 URL,必须使用程序来完成。

Internet Explorer 不能处理超过大约 2048 个字符的 URL.这是几项因素共同作用的结果,不过这是个很好的出发点。微软的官方文档(http://http://support.microsoft.com/kb/q208427)提供了有关限制的更加详细的细节。

Firefox,Opera 和 Safari 浏览器对于多达 80000 字符这样长的 URL 不存在任何已知限制。

微软的 Internet 信息服务器(IIS)默认的最大 URL 长度限制为 16384,不过它是可配置的。

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | 测试对URL长度的处理_测试_测吧(北京)科技有限公司_InfoQ写作社区