首页 > 其他分享 >软件测试 | 测试对URL长度的处理

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

时间:2023-08-25 11:34:04浏览次数:62  
标签:www http zip URL 20170 长度 com 软件测试

问题

你的应用可能无法很好地处理个别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,不过它是可配置的。

标签:www,http,zip,URL,20170,长度,com,软件测试
From: https://blog.51cto.com/u_15605684/7228042

相关文章

  • ci框架url传递参数出现:The URI you submitted has disallowed characters
    原因:这是由于uri中存在CI不允许的字符。解决办法:在config/config.php文件中,找到$config['permitted_uri_chars']='a-z0-9~%.:_/-i';在里面添加允许的字符。如我需要添加@符号,则可以这样:$config['permitted_uri_chars']='a-z0-9~%.:_/-i@......
  • VisionPro 物体长度测量
    右侧......
  • windows wget与curl
     wget下载https://eternallybored.org/misc/wget/curl下载https://curl.se/download.html  ffmpet下载http://ffmpeg.org/......
  • 代码随想录第二天|977.有序数组的平方;209.长度最小的子数组;59.螺旋矩阵II,总结
    今天的这三道题每道题对我来说都不简单,有序数组的平方和长度最小的子数组这两道题还能用暴力求解,螺旋矩阵看着简单却没有思路,磨了半小时还是决定直接看讲解有序数组平方和用的双指针的思想,代码如下:1classSolution{2public:3vector<int>sortedSquares(vector<int......
  • Python怎么通过url下载网络文件到本地
    以下代码演示Python怎么从网络下载一个文件至本地并保存在当前文件夹downloadimportosimportrequestsfromurllib.parseimporturlparsedefdownload_file(url):response=requests.get(url,stream=True)response.raise_for_status()download_dir='do......
  • 软件测试报告-测评中心-专业的CNAS测评机构有哪些?
     软件测试报告的类型 通常,测试报告分为六类:1、登记测试报告(适用于软件产品增值税即征即退以及双软评估)2、鉴定测试报告(适用于政府项目申报、高新认证、项目结题和创新产品认定等)3、验收测试报告(适用于各类软件和硬件系统相结合的综合性集成项目的第......
  • 如何获取拼多多推流码并使用OBS进行直播-疯狂URL
    简介拼多多直播在PC端可以用多多视频|多多直播端进行开播,它的功能类似于常见的抖音直播助手和快手直播伴侣等等客户端。此教程测试时间2023-7-12,第三方随时可能会升级,无法保证时效,建议不要升级多多客户端但这些官方自带的功能都比较有限,相对于OBS这样的主流第三方免费的直播推......
  • 软件测试 | 数据类型的转换
    Java的数据类型在定义时就已经确定了,因此不能随意转换成其他的数据类型,但Java允许用户有限度地做类型转换处理。数据类型的转换方式可以为“自动类型转换”及“强制类型转换”两种。数据类型的自动转换在程序中已经定义好了数据类型的变量,若要用另一种数据类型表示时,Java会在下列的......
  • 软件测试 | Java中的关键字
    Java中也有许多关键字(也叫保留字),如public、static等,这些关键字不能当做标识符使用。表2-1列出了Java中的关键字,这些关键字并不需要去硬背,因为在程序开发中一旦使用了这些关键字做标识符时,编辑器会自动提示错误。对于以上的关键字,要特别注意的有如下3点:(1)虽然goto、const在Java中并没......
  • 软件测试 | Java程序的注释
    在任何编程语言之中,都存在注释,注释的主要功能是让其他用户可以方便地阅读每段程序,提高程序的可读性,还可以通过注释屏蔽掉一些暂时不用的语句,等需要时直接取消此语句的注释即可,在Java中根据功能的不同,注释主要分为单行注释、多行注释、文档注释3种,下面分别进行介绍。单行注释,就是在......