软件测试 | 测试对URL长度的处理
  p1prOQge3cDY 2023年11月02日 51 0

问题

你的应用可能无法很好地处理个别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&a000001
http://www.wxamlp.com/weather.jsp?
zip=20170&a000001=z000001&a000002=z000002
http://www.example.com/weather.jsp?
zip=20170&a000001=z000001&a000002=z000002&a000003=z000003

开头处的伪造参数

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

http://www.example.com/weather.jsp? a000001=z000001&zip=20170
http://www.example.com/weather.jsp?
a000001=z000001&a000002=z000002&zip=20170
http://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,不过它是可配置的。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  cG0i4onRy7gH   2023年11月02日   61   0   0 控件Web数据
p1prOQge3cDY
最新推荐 更多