转:Web页面通过URL地址传递参数常见问题及检测方法

Web页面即我们在浏览器中所看到的网页,在Web应用程序中,其页面往往需要进行动态切换和数据交互,页面间的数据常规传递方法有多种,本文主要介绍Web页面处理程序中常见的URL地址参数传递方法,包括概述其实现原理、特点和常见问题,最后介绍检测该方式常见应用问题的测试思路和方法。

1.web页面的概念

Web是internet上一个非常重要的资源信息网,产生于20世纪90年代初,它遵循超文本传输协议,以超文本或超媒介的形式传送各种各样的信息,为用户提供了一个具有友好的图形化界面——Web页面,以便用户阅读internet上的信息文档。Web页面其实是一个单一的文件,其特点主要表现在:
       1)Web是图形化的和易于导航的。Web可以在一页上同时显示色彩丰富的图形和文本的性能,同时Web非常易于导航,它可以在各页各站点之间进行浏览了。
       2)Web与平台无关。无论你的系统平台是什么,你都可以通过Internet访问WWW。
       3)Web是分布式的。大量的图形、音频和视频信息可以放在不同的站点上。只需要在浏览器中指明这个站点就可以了。
       4)Web 是动态的。Web站点的信息包含站点本身的信息,信息的提供者可以经常对站上的信息进行更新,Web动态的特性还表现在Web是交互的,通过超连接可以连接任意可以连接的页面,从服务器方获得动态的信息。

2.URL地址传递参数方法概述

Web页面是动态和交互的,Web页面之间的数据交换往往存在一些参数的传递,不管是通过哪种语言平台编写Web页面处理程序,其参数传递的方式方法类似,且多种多样,常见方式主要包括通过URL地址、Application/Session、Cache、Cookie以及基于服务器文件或数据库等。
URL地址传递参数方式在我们Web页面程序处理中非常常见,其形式是在页面地址后面附带参数的方式浏览页面,如:“http://test.net/Expert/PostNew.asp?room=301”,其中“room=301”即我们传递的参数名称和值。URL地址方法可以很方便的在页面之间切换并传递参数,无需额外的处理,基于正常情况下不会产生性能损失,以Asp.net程序中URL参数传递处理为例,其简单处理过程如下:
发送页面处理程序a.aspx:
Send_url = “b.aspx?name=” + paraValue;
Response.Redirect(s_url);
接收页面处理程序b.aspx:
Receive_value=Request.QueryString["name"];
URL地址传递参数方式特点主要表现在以下几个方面:
1)URL地址法简洁易用,可同时传递多个字符型参数;
2)URL地址法可以很方便的在页面之间切换并传递参数,无需额外的处理,基于正常情况比较不会性能损失;
3)URL传递参数长度受限,最大为2K;
4)URL只能传递字符型参数;
5)信息泄露:URL地址在客户端可见,导致会泄露信息,可能被黑客用来攻击系统。

3.URL地址传递参数常见应用问题

1)因URL传递参数长度受限,最大为2K,在应用中可能会出现超出范围时的处理错误;
2)URL只能传递字符型参数,在应用中,经常会传递一些中文名的参数或URL地址,因为发送页面和接收页面的字符编码方式不一样而导致参数解析处理错误,参数包含中文时出现乱码或者参数接收错误;
3)Web程序中对字符编码的方法多种多样,但是有些方法对一些特殊字符,如:! @ # $& * ( ) = : / ; ? + ‘中的某些不能进行编码,因此对参数中包含某些特殊字符时不能正确处理,当参数中包含这些特殊字符时,软件接收处理出现异常;
4)URL可以传递一定长度大小字符型参数,在应用中经常通过URL接收的参数需要进一步进行逻辑处理,比如类型转换或者数字计算操作等,处理过程中开发人员可能会对参数在界面输入时限制处理不充分,而且开发人员在后续逻辑处理中过分信任传递过来的参数而未进行充分逻辑判断,导致在后续的逻辑处理中出现边界处理或者类型转换的错误,导致程序出现异常甚至崩溃;
5)URL地址中的参数经常与数据库SQL语句中的参数关联,如果开发人员对SQL语句参数化处理不完善,通过URL地址传递参数也容易引起SQL注入问题,参数中包含特殊字符、类型或者长度不符合要求时导致程序出错,甚至可以通过这个入口破坏或者获取数据库信息;
6)URL显示传递参数,容易产生信息泄露问题,一些关键信息URL地址在客户端可见,这些信息可能被黑客用来攻击系统。

4.URL地址传递方式常见问题测试方法

针对采用URL地址传递参数的Web程序,为发现及解决其应用问题,我们通过以下几个方面进行测试:
1)分析软件需求,是否需要处理超过2K大小的参数,如需要则通过Web界面控件或者URL输入超出2K大小参数进行测试,通过这种方式可以发现软件是否可以正常处理超出2K大小参数的需求问题;如无需求也可以通过此测试检测软件在参数大小超过2K时是否进行了相应的限制或者错误处理;
2)通过Web界面控件或者URL输入中文字符参数进行测试,检测软件在接收页面处理是否正常,是否出现乱码或者异常错误;
3)通过Web界面控件或者URL输入各种特殊字符,例如:! @ # $& * ( ) = : / ; ? + ‘等,检测软件接收处理是否正常,是否可以显示处理必须的特殊字符;
4)通过Web界面控件或者URL输入参数边界值,同时包括输入各种类型参数,检测软件运行是否正常;
5)通过Web界面控件或者URL输入包含跟数据库SQL语句相关的一些特殊字符参数如’= 和一些关键字符串等,检测软件是否存在SQL注入问题,同时也可以采用一些安全测试工具,对URL输入参数进行SQL注入的渗透测试;
6)检测URL参数中是否包含关键信息,并可通过获取信息通过安全测试工具进行恶意破坏或者攻击测试。

5.应用建议

针对URL地址传递参数应用问题,在应用中有如下建议:
1)在安全性要求较高的系统中不推荐使用这种方法,只适合在一些安全性要求不高,页面逻辑比较的简单的场合;
2)对参数长度超出2K的传递建议不要采取此方式;
3)对地址信息进行编码,且保证发送页面和接收页面编码和解码方式对应一致;
4)对从URL地址中接收的参数信息进行边界和类型校验;
5)为防止信息泄露,对URL传递的参数进行加密处理,同时需要考虑加密和解密过程的性能损失;
6)为防止信息泄露,也可对URL进行重写,经过一定算法重组的URL信息,使在IE中不显示真正的参数或者网页链接信息。

总结

Web页面参数传递方式多种多样,各有优缺点,用户在开发和测试过程中,针对各自特点选择相应方式进行设计和相关处理。在Web页面处理程序测试过程中,测试人员应先充分了解Web页面参数传递采用的方式,如果采用URL地址进行参数传递,则根据其特点和应用中常见的问题,采用正确的方法进行测试,以解决各种应用问题,提高Web应用程序的质量。

时间: 2024-08-02 02:45:13

转:Web页面通过URL地址传递参数常见问题及检测方法的相关文章

获取网页URL地址及参数等的两种方法(js和C#)

转:获取网页URL地址及参数等的两种方法(js和C#) 一 js 先看一个示例 用javascript获取url网址信息 <script type="text/javascript"> document.write("location.host="+location.host+"<br>"); document.write("location.hostname="+location.hostname+&

JSP页面间传递参数的5种方法

JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp?action=transparams&detail=directe">直接传递参数< /a> 特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码: response.sendRedirect("thexuan.jsp?acti

获取当前页面完整URL地址

<?php /** * 获取当前页面完整URL地址 */ function get_url() { $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://'; $php_self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']; $p

web工程中URL地址的写法

在开发中我们不可避免的要碰到许多需要写URL地址的情况,这常常让我们感到头疼.下面笔者推荐一种简单的做法.URL地址分为绝对路径和相对路径两种.相对路径又分为相对资源路径和相对根路径.显然绝对路径在开发中是要禁用的.至于相对资源路径和相对根路径用哪个的问题,笔者推荐用相对根路径,相对资源路径容易引起混乱.笔者建议在web开发中通通使用相对根路径,即通通以"/"开头写URL地址.因为这样我们只需弄清楚"/"代表谁即可.可以简单的理解为"/"是给谁用

struts2中注解redirect时传递参数中文乱码问题解决方法

试过了很多方法  tomcat 编码  .字符串转换编码 .URLEncoder  .. 但是都没解决,后来仔细看了   struts2 的redirect ,redirectAction , 加上 params={"encode","true"} 就不会有乱码了 @Action(value = "/backend/deleteApplyInfoOfAuditById", results = { @Result(name = "succ

PHP获取当前页面完整url地址,包括参数的函数

//php获取当前访问的完整url地址 function get_current_url(){     $current_url='http://';     if(isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']=='on'){         $current_url='https://';     }     if($_SERVER['SERVER_PORT']!='80'){         $current_url.=$_SERVER['SE

web工程中URL地址的推荐写法

在Javaweb开发中,只要写URL地址,建议以“/”开头,也就是使用绝对路径的方式. “/”:如果是给服务器的,代表当前的web工程.给浏览器的,代表webapps目录 代表web工程 ①.ServletContext.getRealPath(String path)获取资源的绝对路径 ②.在服务器端forward到其他页面 1 /** 2 * 2.forward 3 * 客户端请求某个web资源,服务器跳转到另外一个web资源,这个forward也是给服务器用的, 4 * 那么这个"/&qu

转载:web工程中URL地址的推荐写法

在JavaWeb开发中,只要是写URL地址,那么建议最好以"/"开头,也就是使用绝对路径的方式,那么这个"/"到底代表什么呢?可以用如下的方式来记忆"/":如果"/"是给服务器用的,则代表当前的web工程,如果"/"是给浏览器用的,则代表webapps目录. 1."/"代表当前web工程的常见应用场景 ①.ServletContext.getRealPath(String path)获取

自定义 404 与 500 错误页面,URL 地址不会重定向。

对于 404 与 500 错误发生时,我们希望自己定义一个更加人性化的页面. 例子 当访问下面这个地址时: http://localhost/aaaa/bbb/ccc/ddd/eee/fff/ggg 浏览器的 URL 不变,依然是 http://localhost/aaaa/bbb/ccc/ddd/eee/fff/ggg 但页面显示的是我们自定义的错误页面. 一.在 web.config 里增加以下节点. <system.webServer> <httpErrors errorMode=