Cookie 安全测试

15.2  Cookie 安全测试

Cookie 提供了一种在 Web 应用程序中存储用户特定信息的方法,例如存储用户的上次

访问时间等信息。但是Cookie 在带来这些编程的方便性的同时,也带来了安全上的问题。

Cookie 的安全性问题与从客户端获取数据的安全性问题是类似的,可以把 Cookie 看成

是另外一种形式的用户输入,因此很容易被黑客们非法利用这些数据。由于Cookie 保存在

客户端,因为在客户端可以直接看到Cookie 中存储的数据,而且可以在浏览器向服务器端

发送Cookie 之前更改Cookie 的数据。因此,对 Cookie 的测试,尤其是安全性方面的测试

非常重要,是Web 应用系统测试中的重要方面。

 

15.2.1   如何判断正在测试的 Web系统使用了 cookie

在进行Cookie 测试之前,首先要判断被测试的 Web 应用系统是否使用了 Cookie 。当然

可以找出web 系统的设计文档、功能规格说明书来看个究竟,或者直接问开发人员。除此

之外,还有更加直接的办法:

1 )找到电脑中存储 cookie 的目录。

需要注意的是不同的浏览器把Cookie 数据存储在不同的目录,IE 浏览器把Cookie 数据

存储在类似下面的目录:

C:\Documents and Settings\user\LocalSettings\Temporary Internet Files

2 )删除所有 cookie

IE 中,cookie 与缓存的临时文件存储在一起。可使用 IE 中的删除Cookies文件功能

来删除所有Cookie ,也可直接找到存储 Cookie 文件的目录进行删除。打开 IE 浏览器,选择菜单“工具 | Internet选项”,如图 15.21所示。

                                  

15.21  Internet 选项

单击“删除Cookies”按钮,出现如图15.22 所示的对话框。单击“确定”按钮,把所

Cookie 文件删除掉。

    

15.22  删除Cookies

3 )设置IE ,当使用到Cookie 时自动提示。

如果想确切地知道测试的Web 系统在什么地方使用了 Cookie ,可以对 IE 浏览器进行一

些设置,让 IE 浏览器在使用到Cookie 时自动弹出提示窗口,这样测试时就能知道在什么时

候、什么功能操作使用到了 Cookie IE 的设置方法是:打开 IE 菜单“工具 | Internet选项”,

切换到“隐私”页面,如图15.23 所示。

 

15.23  设置IE

单击“高级”按钮,出现如图15.24所示的界面。

 

15.24  高级隐私策略设置

选择“覆盖自动cookie 处理”,在“第一方Cookie ”处选择“提示”,在“第三方 Cookie

处也选择“提示”,然后单击“确定”按钮。这样,当Web 页面使用到 Cookie 时,IE 浏览

器会自动提示如图15.25所示的界面。

15.25  隐私警报

说明:单击其中的“详细信息”,可以看到如图15.26 所示的Cookie 详细信息。包括

Cookie 的名称、来源、路径、数据、截止期限等信息。

 

15.26  查看详细的Cookie 信息

15.2.2 Cookie 测试方法 - 屏蔽Cookie

这是最简单的Cookie 测试方法,检查当 Cookie 被屏蔽时Web 系统会出现什么问题。

首先关闭所有浏览器实例,删除测试机器上的所有cookie 。设置IE 屏蔽Cookie ,可通过把

IE 的“隐私”设置为如图15.27 所示的“阻止所有Cookie ”。

 

15.27  阻止所有Cookie

黑测工作室 - http://cnblogs.com/hackchecker  3

黑测工作室 - http://cnblogs.com/hackchecker 

然后运行Web 系统的所有主要功能,很多时候会出现功能不能正常运行的情况。如果

用户必须激活Cookie 使用设置才能正常运行 web 系统的话,则需要检查Web 服务器是否能

正确识别出客户端的Cookie 设置情况,当用户屏蔽了 Cookie 时,Web 服务器应该发送一个

提示页面,告诉用户激活Cookie 设置才能使用系统。例如下面的 ASP.NET代码:

public partial class _Default :System.Web.UI.Page  

{

   protected void Page_Load(object sender, EventArgs e)

    {

       System.Web.HttpBrowserCapabilities myBrowserCaps = Request.Browser;

       //  判断浏览器是否支持 Cookies

       if (((System.Web.Configuration. HttpCapabilitiesBase)myBrowserCaps).Cookies)

       {

           this.Title = "浏览器支持 Cookies";

           //  判断浏览器是否接受Cookies

           if (!Page.IsPostBack)

           {

               if (Request.QueryString["AcceptsCookies"] == null)

                {

                    //  判断浏览器是否禁用了 Cookie

                    HttpCookie TestCookie = newHttpCookie("TestCookie");

                   Response.Cookies["TestCookie"].Value = "OK";

                   Response.Cookies["TestCookie"].Expires =DateTime.Now.AddMinutes(1);

                   Response.Cookies.Add(TestCookie);

                    Response.Redirect("TestForCookies.aspx?redirect="

 +

Server.UrlEncode(Request.Url.ToString().Replace("localhost","127.0.0.1")));

                }

                else

                {

                    this.Title = "Acceptcookies = " 

+ 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";

           // 删除Cookie

           Response.Cookies["TestC ookie"].Expires = DateTime.Now.AddDays(-1);

       }

       Response.Redirect(redirect + "?AcceptsCookies=" +acceptsCookies, true);

    }

}

说明:首先判断浏览器是否支持Cookie ,然后判断浏览器是否禁用了Cookie ,后续的

代码可根据这些判断的结果来决定是否使用Cookie 功能,或者提示用户启用Cookie 设置。

 

15.2.3  Cookie 测试方法 - 有选择性地拒绝Cookie

这种测试方法的目的是验证这种情况:如果某些Cookie 被接受,某些 Cookie 被拒绝,

Web 系统会发生什么事情?

首先删除测试机器上的所有Cookie ,然后设置IE Cookie 选项,当Web 系统试图设

置一个Cookie 时弹出提示。然后运行 Web 系统的所有主要功能。在弹出的 Cookie 提示中,

接受某些Cookie ,拒绝某些 Cookie 。检查 Web 系统的工作情况,看Web 服务器是否能检

测出某些Cookie 被拒绝了,是否出现正确的提示信息。有可能 Web 系统会因为这样而出现

错误、崩溃、数据错乱,或其他不正常的行为。

例如在测试过程中,对前面的用于测试浏览器是否接受Cookie 的“测试 Cookie ”都予

以接受,但是对后面的设置Cookie 则予以拒绝,那么如果后续的代码要依赖所设置的Cookie

时,则会出错。例如下面的代码中,读取Cookies部分的代码如果没有判断 Cookie 是否存

在,则会出现异常。

   //  设置Cookies

   protected void Button1_Click(object sender, EventArgs e)

    {

           HttpCookie myCookie = new HttpCookie("LastVisit");

           DateTime now = DateTime.Now;

           myCookie.Value = now.ToString();

           myCookie.Expires = now.AddHours(1);

           Response.Cookies.Add(myCookie);

    }

   //  读取Cookies

   protected void Button2_Click(object sender, EventArgs e)

    {

       //if (Request.Cookies["LastVisit"] != null)

       //{

           this.Label1.Text = Request.Cookies["LastVisit"].Value;

       //}

}

 

15.2.4  Cookie 测试方法 - 篡改Cookie

如果某些存储下来的Cookie 被篡改了,或者被删除了,Web 系统会出现什么问题吗?

如果Web 系统不能检测到 Cookie 数据被篡改了,则很可能出现功能异常,或者数据错乱等

问题。优秀的设计则会检测到Cookie 数据的篡改,及时更新替换 Cookie 文件。

假设有如下ASP.NET页面,根据 Cookie 判断访问者的到访顺序,并且根据到访顺序做

出相应的业务处理,如果是第 8 位访问者,则送出奖品,那么就可能导致别有用心者通过篡

Cookie 数据来获得奖品。

   protected void Page_Load(object sender, EventArgs e)

    {

           int counter;

           if (Request.Cookies["counter"] == null)

           {

                counter = 0;

           }

           else

           {

                //  读取Cookie数据

                counter =int.Parse(Request.Cookies["counter"].Value);

           }

           counter++;

           //  如果是第8 位访问者

           if (counter == 8)

           {

                this.Label2.Text = " 您是第8 位访问者!";

           }

           //  设置Cookie

           Response.Cookies["counter"].Value = counter.ToString();

           Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1);

    }

可以通过修改存储下来的Cookie 数据来达到不公平竞争的目的,查找到这个 ASP.NET

页面使用的Cookie 文件并用文本编辑工具打开,可看到类似如下信息:

counter

3

127.0.0.1/

1536

1291366528

29908157

589053024

29907956

*

counter 后面的值改为7 (注意修改前要关闭浏览器)。然后再次访问上面的

ASP.NET.NET页面,则counter值变成了 8 ,页面提示“您是第 8 位访问者!”。

说明:测试过程中应该查找是否有业务逻辑是依赖Cookie 存储值而进行的,如果有,

则尝试修改Cookie 的值,看是否导致功能不正常,或者业务逻辑的混乱。另外,也可以尝

试有选择性地删除Cookie 。在运行Web 系统一段时间后,把其中某些Cookie 文件删除掉,

然后继续使用Web 系统,看会出现什么情况,是否能恢复、是否有数据丢失或错乱。

 

15.2.5  Cookie 测试方法 - Cookie加密测试

检查存储的Cookie 文件内容,看是否有用户名、密码等敏感信息存储,并且未被加密

处理。某些类型的数据即使是加密了也绝对不能存储在 Cookie 文件中的,例如:信用卡号。

测试的方法可以手工地打开所有Cookie 文件来查看,也可以利用一些 Cookie 编辑工具来查

看,例如,如图15.28 所示的 Cookie Editor

 

15.28  Cookie Editor 界面

利用Cookie Editor,可以列出所有 Cookie 文件,还可以在 Cookie 文件中搜索内容,如

15.29 所示。

15.29  搜索Cookie

说明:在“Look for”的输入框中输入需要查找的内容,例如 username password 等敏

感信息的关键字,单击“Go”按钮进行查找。

 

15.2.6  Cookie 安全内容检查

Cookie 安全内容检查包括前面讲的存储内容的检查,还包括以下方面:

1 Cookie 过期日期设置的合理性:检查是否把Cookie 的过期日期设置得过长。

2 HttpOnly 属性的设置:把 Cookie HttpOnly 属性设置为True 有助于缓解跨站点

脚本威胁,防止Cookie 被窃取。

3 Secure 属性的设置:把 Cookie Secure 属性设置为 True ,在传输 Cookie 时使用

SSL 连接,能保护数据在传输过程中不被篡改。

对于这些设置,可以利用Cookie Editor 来查看是否正确地被设置,如图 15.30 所示。

15.30  查看Cookie 的设置

说明:可在“Expiration Date and Time”中查看 Cookie 的过期日期设置是否合理,查看

HttpOnly ”和“Secure ”是否勾选上,勾选上表示设置为True 。在“Cookie Value ”中可

查看是否存在敏感信息,数据是否经过加密。

 

 

转载:http://www.docin.com/p-276248693.html

 

 

你可能感兴趣的:(测试技术)