论文部分内容阅读
摘 要:在Web应用程序中,Cookie应用十分广泛,且给用户带来了极大的便利,然而,由于Cookie中所包含信息的敏感性,极易被不法人员利用而造成巨大损失,因此,如何对Cookie进行有效的测试就成为用户上网安全的重要保障。本文对Cookie的概念、作用和调用过程进行了分析,并Cookie机制存在的问题进行了讨论,在此基础上提出了Cookie测试的概念,并对Cookie测试的测试点进行了分析,进而采用测试工具进行测试法、屏蔽测试法、有选择性拒绝测试法、篡改测试法实现了对Cookie的初步测试。测试结果表明,本文所提出的方法在实现Cookie测试方面具有较好的效果。
关键词:Cookie测试;测试点;Cookie测试方法
中图分类号:TP311.52
Cookie技术由网景公司(Netscape)员工Lou Montulli于1993年发明。随后World Wide Web(WWW)协会支持并采纳了Cookie标准,微软也在Internet Explorer浏览器中使用了Cookie。现在,绝大多数浏览器都支持Cookie,几乎所有的网站设计者都使用了Cookie技术。随着cookie技术的普及,cookie技术使得浏览网页更加容易,但cookie技术的滥用也给用户信息造成了极大的威胁。因此,如何对Cookie进行有效的测试是就成为用户上网安全的重要保证。本文提出了4种Cookie测试方法:测试工具测试法、屏蔽测试法、有选择性拒绝测试法、篡改测试法对Cookie进行全面的测试,实验表明,以上方法能够有效实现对Cookie的全面测试,保证Cookie使用安全。
1 Cookie概述
1.1 Cookie的概念及作用
Cookie是Web服务器保存在用户硬盘上的一段文本,它允许一个Web站点在用户的电脑上保存信息并且随后再取回,信息的片断以“名/值”(Name/Value)对的形式储存,用户在浏览网页时,服务器发送给浏览器的体积很小的纯文本信息,它保存在客户机的内存或客户机的硬盘中,用户以后访问同一个Web服务器时,浏览器会把它们原样发送给服务器。通过让服务器读取它原先保存到客户端的信息,网站能够为浏览者提供一系列方便[1],例如在线交易过程中标识用户身份、安全要求不高的场合避免用户重复输入用户名和密码、门户网站的主页定制、有针对性地投放广告等。目前Cookie技术已广泛用于Web应用中。
1.2 Cookie的组成
Netscape公司规定的Cookie格式为:Name=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE。它由变量名和及其对应值两部分组成,Name即为Cookie的名称,VALUE为其值,Expires是cookie的生存期,PATH标识URL路径,Domain为域名[2]。
(1)Name=VALUE:是Cookie必备部分,Name代表其名称,VALUE为其赋值。
(2)Expires=DATE:Expires变量标识出Cookie生存期,可以缺省,其书写格式为:星期几,DD-MM-YY HH:MM:SS GMT(GMT表示這是格林尼治时间)。
(3)Domain=DOMAIN_NAME:Domain标识出Cookie的主机名或域名,通过该参数可以指定Internet域中可读取浏览器所存取的Cookie的Web服务器,即只有来自这个域的页面才可以使用Cookie中的信息。该参数若缺省时,设置Cookie的属性值为该Web服务器的域名。
(4)Path=PATH:Path定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie。若Path值为“/”,则Web服务器上所有的WWW资源均可读取该Cookie。该项若缺省,Path的属性值表示由Web服务器传给浏览器的资源的路径名。
(5)Secure:若Cookie中含有该变量,则说明浏览器和Web Server之间的通信协议为加密认证协议(HTTPS)时,浏览器才可以向服务器提交相应的Cookie。
1.3 Cookie的调用过程
图1 使用cookie实现单点登录
图1所示Cookie实现单点登录的步骤如下:
(1)单点登录客户端产生Web应用,向单点登录服务器请求访问和使用受保护的应用。
(2)单点登录服务器分析客户端请求,首先检查这个客户端是否已经拥有创建好的有效Cookie。
(3)若没有有效的Cookie,单点登录客户端则将Web应用请求重定向至单点登录服务器,用户输入相应信息(如用户名和密码等),然后经过LDAP服务器认证,将会产生本次客户端Web访问相关的Cookie。
(4)当另一单点登录客户端再次产生该Web应用时,单点登录服务器首先会检测与该应用相关的Cookie,然后将该Cookie在LDAP服务器中进行验证;若验证无误,则通过某种授权机制将Cookie返还给Web应用,则单点登录客户端就可访问到个性化的Web服务(如不需要输入用户名和密码,直接访问等)。
2 Cookie机制存在的问题
由于Cookie是保存在客户端或者应用服务器上的用户信息,而网络的不安全性注定了Cookie机制的不安全性,虽然Cookie采用了相应的加密机制,但仍不可避免地造成用户相关信息的泄漏,如用户登录网站时的用户名、密码、用户登录网站时的使用习惯等,一旦被不发分子利用,将给用户安全带来巨大危害[3]。
3 Cookie测试方法研究
3.1 Cookie测试点
既然要对Cookie进行测试,那么首先我们要找到Cookie的测试点是什么,然后方可进行测试,所谓测试点指所具备的即功能项、性能指标等,本文认为Cookie测试的测试点主要有:数据完整性(参数完整性)、数据校验(输入更改,页面显示效果)、生存期正常与否(是否可以达到预期保留时间)、可用性(是否可以正常工作)等几个方面。 3.2 Cookie测试方法
3.2.1 通过已有测试工具进行测试
常用的Cookie测试工具有:Cookie Editor、IECookieView、Cookies Manager、MyCookie等,本文以Cookie Editor为例完成对Cookie的测试[4]。
如图所示,通过Cookie Editor1.9可以轻松的查看电脑中所有存储的Cookie的Name、value、created date、expiration、last modified date等信息,亦可通过Look for进行精确查询相应Cookie是否存在泄密或者超时等问题。通过该软件业可以轻松实现对存储的Cookie的测试。
3.2.2 屏蔽Cookie测试法
将IE浏览器Internet选项中的隐私设置为“阻止所有Cookie”,然后再次通过IE浏览器进行网页访问,若出现提示:需用户激活Cookie设置才能使用时,说明该浏览器对Cookie是禁用的,需用户手动启用cookie方能正常使用浏览器。
Public partial class_Default:System.Web.UI.Page
{
Protected void Page_load(Object sender,EventArgs e)
{
System.Web.HttpBrowserCapabilities myBrowserCaps=Request.Browser;
if(((System.Web.Configuration.HttpCapabilitiesBase)myBrowserCaps).Cookies)
{
this.Title="浏览器支持Cookie。";//判断浏览器是否支持Cookie
if(!Page.IsPostBack)
{
if(Request.QueryString["AcceptsCookies"]==null)//判断浏览器是否禁用了Cookie
{
HttpCookie TestCookie=new HttpCookie("TestCookie");
Reponse.Cookie["TestCookie"].Value="OK";
Reponse.Cookie["TestCookie"].Expires=DateTime.Now.AddMinutes(1);
Reponse.Cookie["TestCookie"].Add(TestCookie);
Reponse.Redirect("TestForCookie.aspx?redirect="+Server.UrlEncode(Request.Url.ToString().Replace("localhost","127.0.0.1")));
}
else
{this.Title="Accept cookies="+Server.UrlEncode(Request.QueryString["AcceptsCookies"]);}
}
}
else
{this.Title="浏览器不支持Cookies。";}
}
}
Public partial class TestForCookies:System.Web.UI.Page
{
Protected void Page_Load(Object sender,EventArgs e)
{
string redirect=Request.QueryString["redirect"];
string acceptsCookies;
if(Request.Cookies["TestCookie"]==null)
{acceptsCookies="NO";}
else
{acceptsCookies="YES";Response.Cookies["TestCookie"].Expires=DateTime.Now.AddDays(-1);}
Response.Redirect(redirect+"?AcceptsCookies="+acceptsCookies,true);
}
}
3.2.3 有選择性拒绝测试法
首先,删除机器上的所有Cookie,然后设置IE的Cookie选项,当Web系统试图设置一个Cookie时弹出提示。然后运行Web系统的所有主要功能。在弹出的Cookie提示中接受某些Cookie,拒绝一部分,然后检查Web系统的工作情况,看Web服务器是否能检测出某些Cookie被拒绝了,是否出现正确的提示信息。有可能Web系统会因为这样出现错误、崩溃、数据错乱,或其他不正常的行为。
Protected void Button1_click(object sender,EventArgs e)//设置Cookie
{
HttpCookie myCookie=new HttpCookie("LastViset");
DateTime now=DateTime.now;
myCookie.Value=now.ToString(); myCookie.Expires=now.AddHours(1);
Response.Cookies.Add(myCookie);
}
Protected void Button2_click(object sender,EventArgs e)//读取Cookie
{
If(Request.Cookies["LastViset"]!=null)
{This.Label1.Text=Request.Cookies["LastViset"].Value;}
}
3.2.4 篡改测试法[5]
该方法通过对计算机上已存在的Cookie信息进行篡改,测试Cookie机制能否及时更新替换Cookie文件。以网站的第几位访问者问题为例。
Protected void Page_Load(object sender,EventArgs e)
{
int counter;
if(Request.Cookies["counter"]==0){Counter=0;}
Else
{Counter=int.Parse(Request.Cookie["counter"].Value);}
counter++;
If(counter==8)
{This.Label2.Text="您是第8位访问者!";}
Reponse.Cookies["counter"].Value=counter.ToString();
Reponse.Cookies["counter"].Expires=DateTime.Now.AddDays(1);
}
4 结束语
本文首次提出了Cookie测试的概念,并对如何测试Cookie进行了分析,并采用:通过已有测试工具进行测试、屏蔽Cookie测试法、有选择性拒绝测试法、篡改测试法对Cookie测试进行了简要分析,实验证明以上几种方法可以有效的实现对Cookie的初步测试。然而,由于Cookie的特殊性,要实现对Cookie的完全测试十分困难,且在每种浏览器对Cookie的兼容效果亦不相同。
参考文献:
[1]文德民,门爱东,文爱平.基于Cookie的跨域单点登录系统的设计[J].电脑知识与技术,2009(05):9146-9147.
[2]马亚娜,钱焕延,孙亚民.Cookie在Web认证中的应用研究[J].刑事技术,2004(02):18-21.
[3]吴春生,宋润,贾永生.Cookie信息取证方法简述[J].刑事技术,2011(01):18-21.
[4]Cookie测试工具小汇总[OL].软件测试网.http://www.51testing.com/html/index.html
[5]Cookie安全测试[OL].软件测试网.http://www.51testing.com/html/index.html
作者简介:李柱(1985-),男,硕士,主要研究方向:软件测试技术与理论。
作者單位:重庆交通大学办公自动化系统管理办公室,重庆 400074
关键词:Cookie测试;测试点;Cookie测试方法
中图分类号:TP311.52
Cookie技术由网景公司(Netscape)员工Lou Montulli于1993年发明。随后World Wide Web(WWW)协会支持并采纳了Cookie标准,微软也在Internet Explorer浏览器中使用了Cookie。现在,绝大多数浏览器都支持Cookie,几乎所有的网站设计者都使用了Cookie技术。随着cookie技术的普及,cookie技术使得浏览网页更加容易,但cookie技术的滥用也给用户信息造成了极大的威胁。因此,如何对Cookie进行有效的测试是就成为用户上网安全的重要保证。本文提出了4种Cookie测试方法:测试工具测试法、屏蔽测试法、有选择性拒绝测试法、篡改测试法对Cookie进行全面的测试,实验表明,以上方法能够有效实现对Cookie的全面测试,保证Cookie使用安全。
1 Cookie概述
1.1 Cookie的概念及作用
Cookie是Web服务器保存在用户硬盘上的一段文本,它允许一个Web站点在用户的电脑上保存信息并且随后再取回,信息的片断以“名/值”(Name/Value)对的形式储存,用户在浏览网页时,服务器发送给浏览器的体积很小的纯文本信息,它保存在客户机的内存或客户机的硬盘中,用户以后访问同一个Web服务器时,浏览器会把它们原样发送给服务器。通过让服务器读取它原先保存到客户端的信息,网站能够为浏览者提供一系列方便[1],例如在线交易过程中标识用户身份、安全要求不高的场合避免用户重复输入用户名和密码、门户网站的主页定制、有针对性地投放广告等。目前Cookie技术已广泛用于Web应用中。
1.2 Cookie的组成
Netscape公司规定的Cookie格式为:Name=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE。它由变量名和及其对应值两部分组成,Name即为Cookie的名称,VALUE为其值,Expires是cookie的生存期,PATH标识URL路径,Domain为域名[2]。
(1)Name=VALUE:是Cookie必备部分,Name代表其名称,VALUE为其赋值。
(2)Expires=DATE:Expires变量标识出Cookie生存期,可以缺省,其书写格式为:星期几,DD-MM-YY HH:MM:SS GMT(GMT表示這是格林尼治时间)。
(3)Domain=DOMAIN_NAME:Domain标识出Cookie的主机名或域名,通过该参数可以指定Internet域中可读取浏览器所存取的Cookie的Web服务器,即只有来自这个域的页面才可以使用Cookie中的信息。该参数若缺省时,设置Cookie的属性值为该Web服务器的域名。
(4)Path=PATH:Path定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie。若Path值为“/”,则Web服务器上所有的WWW资源均可读取该Cookie。该项若缺省,Path的属性值表示由Web服务器传给浏览器的资源的路径名。
(5)Secure:若Cookie中含有该变量,则说明浏览器和Web Server之间的通信协议为加密认证协议(HTTPS)时,浏览器才可以向服务器提交相应的Cookie。
1.3 Cookie的调用过程
图1 使用cookie实现单点登录
图1所示Cookie实现单点登录的步骤如下:
(1)单点登录客户端产生Web应用,向单点登录服务器请求访问和使用受保护的应用。
(2)单点登录服务器分析客户端请求,首先检查这个客户端是否已经拥有创建好的有效Cookie。
(3)若没有有效的Cookie,单点登录客户端则将Web应用请求重定向至单点登录服务器,用户输入相应信息(如用户名和密码等),然后经过LDAP服务器认证,将会产生本次客户端Web访问相关的Cookie。
(4)当另一单点登录客户端再次产生该Web应用时,单点登录服务器首先会检测与该应用相关的Cookie,然后将该Cookie在LDAP服务器中进行验证;若验证无误,则通过某种授权机制将Cookie返还给Web应用,则单点登录客户端就可访问到个性化的Web服务(如不需要输入用户名和密码,直接访问等)。
2 Cookie机制存在的问题
由于Cookie是保存在客户端或者应用服务器上的用户信息,而网络的不安全性注定了Cookie机制的不安全性,虽然Cookie采用了相应的加密机制,但仍不可避免地造成用户相关信息的泄漏,如用户登录网站时的用户名、密码、用户登录网站时的使用习惯等,一旦被不发分子利用,将给用户安全带来巨大危害[3]。
3 Cookie测试方法研究
3.1 Cookie测试点
既然要对Cookie进行测试,那么首先我们要找到Cookie的测试点是什么,然后方可进行测试,所谓测试点指所具备的即功能项、性能指标等,本文认为Cookie测试的测试点主要有:数据完整性(参数完整性)、数据校验(输入更改,页面显示效果)、生存期正常与否(是否可以达到预期保留时间)、可用性(是否可以正常工作)等几个方面。 3.2 Cookie测试方法
3.2.1 通过已有测试工具进行测试
常用的Cookie测试工具有:Cookie Editor、IECookieView、Cookies Manager、MyCookie等,本文以Cookie Editor为例完成对Cookie的测试[4]。
如图所示,通过Cookie Editor1.9可以轻松的查看电脑中所有存储的Cookie的Name、value、created date、expiration、last modified date等信息,亦可通过Look for进行精确查询相应Cookie是否存在泄密或者超时等问题。通过该软件业可以轻松实现对存储的Cookie的测试。
3.2.2 屏蔽Cookie测试法
将IE浏览器Internet选项中的隐私设置为“阻止所有Cookie”,然后再次通过IE浏览器进行网页访问,若出现提示:需用户激活Cookie设置才能使用时,说明该浏览器对Cookie是禁用的,需用户手动启用cookie方能正常使用浏览器。
Public partial class_Default:System.Web.UI.Page
{
Protected void Page_load(Object sender,EventArgs e)
{
System.Web.HttpBrowserCapabilities myBrowserCaps=Request.Browser;
if(((System.Web.Configuration.HttpCapabilitiesBase)myBrowserCaps).Cookies)
{
this.Title="浏览器支持Cookie。";//判断浏览器是否支持Cookie
if(!Page.IsPostBack)
{
if(Request.QueryString["AcceptsCookies"]==null)//判断浏览器是否禁用了Cookie
{
HttpCookie TestCookie=new HttpCookie("TestCookie");
Reponse.Cookie["TestCookie"].Value="OK";
Reponse.Cookie["TestCookie"].Expires=DateTime.Now.AddMinutes(1);
Reponse.Cookie["TestCookie"].Add(TestCookie);
Reponse.Redirect("TestForCookie.aspx?redirect="+Server.UrlEncode(Request.Url.ToString().Replace("localhost","127.0.0.1")));
}
else
{this.Title="Accept cookies="+Server.UrlEncode(Request.QueryString["AcceptsCookies"]);}
}
}
else
{this.Title="浏览器不支持Cookies。";}
}
}
Public partial class TestForCookies:System.Web.UI.Page
{
Protected void Page_Load(Object sender,EventArgs e)
{
string redirect=Request.QueryString["redirect"];
string acceptsCookies;
if(Request.Cookies["TestCookie"]==null)
{acceptsCookies="NO";}
else
{acceptsCookies="YES";Response.Cookies["TestCookie"].Expires=DateTime.Now.AddDays(-1);}
Response.Redirect(redirect+"?AcceptsCookies="+acceptsCookies,true);
}
}
3.2.3 有選择性拒绝测试法
首先,删除机器上的所有Cookie,然后设置IE的Cookie选项,当Web系统试图设置一个Cookie时弹出提示。然后运行Web系统的所有主要功能。在弹出的Cookie提示中接受某些Cookie,拒绝一部分,然后检查Web系统的工作情况,看Web服务器是否能检测出某些Cookie被拒绝了,是否出现正确的提示信息。有可能Web系统会因为这样出现错误、崩溃、数据错乱,或其他不正常的行为。
Protected void Button1_click(object sender,EventArgs e)//设置Cookie
{
HttpCookie myCookie=new HttpCookie("LastViset");
DateTime now=DateTime.now;
myCookie.Value=now.ToString(); myCookie.Expires=now.AddHours(1);
Response.Cookies.Add(myCookie);
}
Protected void Button2_click(object sender,EventArgs e)//读取Cookie
{
If(Request.Cookies["LastViset"]!=null)
{This.Label1.Text=Request.Cookies["LastViset"].Value;}
}
3.2.4 篡改测试法[5]
该方法通过对计算机上已存在的Cookie信息进行篡改,测试Cookie机制能否及时更新替换Cookie文件。以网站的第几位访问者问题为例。
Protected void Page_Load(object sender,EventArgs e)
{
int counter;
if(Request.Cookies["counter"]==0){Counter=0;}
Else
{Counter=int.Parse(Request.Cookie["counter"].Value);}
counter++;
If(counter==8)
{This.Label2.Text="您是第8位访问者!";}
Reponse.Cookies["counter"].Value=counter.ToString();
Reponse.Cookies["counter"].Expires=DateTime.Now.AddDays(1);
}
4 结束语
本文首次提出了Cookie测试的概念,并对如何测试Cookie进行了分析,并采用:通过已有测试工具进行测试、屏蔽Cookie测试法、有选择性拒绝测试法、篡改测试法对Cookie测试进行了简要分析,实验证明以上几种方法可以有效的实现对Cookie的初步测试。然而,由于Cookie的特殊性,要实现对Cookie的完全测试十分困难,且在每种浏览器对Cookie的兼容效果亦不相同。
参考文献:
[1]文德民,门爱东,文爱平.基于Cookie的跨域单点登录系统的设计[J].电脑知识与技术,2009(05):9146-9147.
[2]马亚娜,钱焕延,孙亚民.Cookie在Web认证中的应用研究[J].刑事技术,2004(02):18-21.
[3]吴春生,宋润,贾永生.Cookie信息取证方法简述[J].刑事技术,2011(01):18-21.
[4]Cookie测试工具小汇总[OL].软件测试网.http://www.51testing.com/html/index.html
[5]Cookie安全测试[OL].软件测试网.http://www.51testing.com/html/index.html
作者简介:李柱(1985-),男,硕士,主要研究方向:软件测试技术与理论。
作者單位:重庆交通大学办公自动化系统管理办公室,重庆 400074