浅谈cookie测试
Cookie 提供了一种在Web 应用程序中存储用户特定信息的方法,例如存储用户的上次 访问时间等信息。假如不进行cookie存储一个网站的用户行为,那么可能会造成以下问题:用户进行购买几件商品转到结算页面时,系统怎样知道用户之前订了哪几件商品。因为,cookie其中一个作用就是记录用户操作系统的日志,而系统对cookie不单单是存储,还有读取,也就是说系统和用户之前是一个交互的过程,这称为有状态。
但是Cookie 在带来这些编程的方便性的同时,也带来了安全上的问题。Cookie 的安全性问题与从客户端获取数据的安全性问题是类似的,可以把Cookie 看成是另外一种形式的用户输入,因此很容易被黑客们非法利用这些数据。由于Cookie 保存在客户端,因为在客户端可以直接看到Cookie中存储的数据,而且可以在浏览器向服务器端发送Cookie 之前更改Cookie 的数据。因此,对Cookie 的测试,尤其是安全性方面的测试 非常重要,是Web 应用系统测试中的重要方面。
·如何判断正在测试的Web 系统使用了cookie?
在进行Cookie 测试之前,首先要判断被测试的Web 应用系统是否使用了Cookie。当然可以找出web系统的设计文档、功能规格说明书来看个究竟,或者直接问开发人员。除此之外,还有更加直接的办法:
(1)找到电脑中存储cookie 的目录。
需要注意的是不同的浏览器把Cookie 数据存储在不同的目录,IE 浏览器把Cookie 数据存储在类似下面的目录:
C:\Documents and Settings\user\Local Settings\Temporary Internet Files
(2)删除所有cookie。
在IE 中,cookie 与缓存的临时文件存储在一起。可使用IE 中的删除Cookies 文件功能来删除所有Cookie,也可直接找到存储Cookie 文件的目录进行删除。打开IE 浏览器,选择 菜单“工具 | Internet 选项”(或者按快捷方式“Ctrl+Shift+Delete”),如图1 所示。
图1 Internet 选项
单击“删除Cookies”按钮,出现如图2 所示的对话框。单击“确定”按钮,把所有Cookie 文件删除掉。
图2 删除Cookies
(3)设置IE,当使用到Cookie 时自动提示。
如果想确切地知道测试的Web 系统在什么地方使用了Cookie,可以对IE 浏览器进行一些设置,让IE 浏览器在使用到Cookie 时自动弹出提示窗口,这样测试时就能知道在什么时候、什么功能操作使用到了Cookie。IE 的设置方法是:打开IE 菜单“工具 | Internet 选项”,切换到“隐私”页面,如图3 所示。
图3 设置IE
单击“高级”按钮,出现如图4 所示的界面。
图4 高级隐私策略设置
选择“覆盖自动cookie 处理”,在“第一方Cookie”处选择“提示”,在“第三方Cookie”
处也选择“提示”,然后单击“确定”按钮。这样,当Web 页面使用到Cookie 时,IE 浏览
器会自动提示如图5 所示的界面。
图5 隐私警报
说明:单击其中的“详细信息”,可以看到如图6 所示的Cookie 详细信息。包括
Cookie 的名称、来源、路径、数据、截止期限等信息。
图6 查看详细的Cookie 信息
·Cookie 测试方法 - 屏蔽 Cookie
这是最简单的Cookie 测试方法,检查当Cookie 被屏蔽时Web 系统会出现什么问题。
首先关闭所有浏览器实例,删除测试机器上的所有cookie。设置IE 屏蔽Cookie,可通过把 IE的“隐私”设置为如图7 所示的“阻止所有Cookie”。
图7 阻止所有Cookie
然后运行Web 系统的所有主要功能,很多时候会出现功能不能正常运行的情况。如果用户必须激活Cookie 使用设置才能正常运行web 系统的话,则需要检查Web 服务器是否能正确识别出客户端的Cookie 设置情况,当用户屏蔽了Cookie 时,Web 服务器应该发送一个提示页面,告诉用户激活Cookie 设置才能使用系统(测试用例)。
·Cookie 测试方法 - 有选择性地拒绝Cookie
这种测试方法的目的是验证这种情况:如果某些Cookie 被接受,某些Cookie 被拒绝,
Web 系统会发生什么事情?
首先删除测试机器上的所有Cookie,然后设置IE 的Cookie 选项,当Web 系统试图设置一个Cookie 时弹出提示。然后运行Web 系统的所有主要功能。在弹出的Cookie 提示中,接受某些Cookie,拒绝某些Cookie。检查Web 系统的工作情况,看Web 服务器是否能检测出某些Cookie 被拒绝了,是否出现正确的提示信息。有可能Web 系统会因为这样而出现错误、崩溃、数据错乱,或其他不正常的行为。
例如在测试过程中,对前面的用于测试浏览器是否接受Cookie 的“测试Cookie”都予
以接受,但是对后面的设置Cookie 则予以拒绝,那么如果后续的代码要依赖所设置的Cookie 时,则会出错。例如下面的代码中,读取Cookies 部分的代码如果没有判断Cookie 是否存
在,则会出现异常。
·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 系统,看会出现什么情况,是否能恢复、是否有数据丢失或错乱。
·Cookie 测试方法 - Cookie 加密测试
检查存储的Cookie 文件内容,看是否有用户名、密码等敏感信息存储,并且未被加密处理。某些类型的数据即使是加密了也绝对不能存储在Cookie 文件中的,例如:信用卡号。
测试的方法可以手工地打开所有Cookie 文件来查看,也可以利用一些Cookie 编辑工具来查看,例如,如图8 所示的Cookie Editor。
图8 Cookie Editor 界面
利用Cookie Editor,可以列出所有Cookie 文件,还可以在Cookie 文件中搜索内容,如图9 所示。
图9 搜索Cookie
说明:在“Look for”的输入框中输入需要查找的内容,例如username、password 等敏
感信息的关键字,单击“Go”按钮进行查找。
·Cookie 安全内容检查
Cookie 安全内容检查包括前面讲的存储内容的检查,还包括以下方面:
(1)Cookie 过期日期设置的合理性:检查是否把Cookie 的过期日期设置得过长。
(2 )HttpOnly 属性的设置:把Cookie 的HttpOnly 属性设置为True 有助于缓解跨站点脚本威胁,防止Cookie 被窃取。
(3)Secure 属性的设置:把Cookie 的Secure 属性设置为True,在传输Cookie 时使用SSL连接,能保护数据在传输过程中不被篡改。
对于这些设置,可以利用Cookie Editor 来查看是否正确地被设置,如图10 所示。
图10 查看Cookie 的设置
说明:可在“Expiration Date and Time”中查看Cookie 的过期日期设置是否合理,查“HttpOnly”和“Secure”是否勾选上,勾选上表示设置为True。在“Cookie Value”中可查看是否存在敏感信息,数据是否经过加密。
Session是存在服务器端的;而Cookie是存在客户端的!
Session更不需要Cookie来支持和不会受浏览器端的设置影响,可记录每个访问者的信息,独立在服务器端,比Cookie安全!
Session是存在内存中的,浏览器关闭它也就“死”了;Cookie是以文件方式存在的,可以修改其“存活”时间。
参考来源:
浅谈cookie测试的更多相关文章
- 浅谈cookie 和session 的区别
具体来说 cookie 是保存在“客户端”的,而session是保存在“服务端”的 cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期时间,路径和域: 如果cooki ...
- (进阶篇)浅谈COOKIE和SESSION关系和区别
COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...
- 浅谈 cookie 和 session
1.关闭浏览器后,session是否还存在? session在服务器和客户端各保留一个副本,关闭浏览器与否和session是否存在没有任何关系. session采取的是服务器端保持状态的方案,它存储在 ...
- 测试员浅谈App测试的重点
近年来,手机app也时持续大热.基于安卓和ios的手机app,更是受到众多投资者的青睐.而手机软件测试行业也是如此. 现在听的最多的是web测试和App测试,但实际上两者本质上没有什么区别,性质都一样 ...
- 浅谈cookie,sessionStorage和localStorage
cookie:cookie在浏览器和服务器间来回传递 cookie数据不能超过4k 同时每次http请求都会携带cookie,所以cookie只适合保存很小的数据,比如会话标识 cookie只在设置的 ...
- 浅谈cookie和session
Cookie简介 Cookie(复数形态Cookies),中文名称为“小型文本文件”,指某些网站为了辨别用户身份或存储用户相关信息而存储在用户本地终端(Client Side) 上的数据(通常为加密数 ...
- 浅谈Cookie与Session技术
一.什么是状态管理 将客户端与服务器之间多次交互当做一个整体来看,并且将多次交互所涉及的数据(状态)保存下来. 会话:当用户打开浏览器,访问多个WEB资源,然后关闭浏览器的过程,称之为一个会话,选 ...
- 浅谈cookie与session的区别
cookie用的是在客户端保持状态的方案(它是在用户端的会话状态的存贮机制),前端也可以来设置他 所有浏览器都识别,并且会缓存在浏览器中. cookie是以key=value这种键值对的形式保存,每个 ...
- 浅谈cookie、session
揭秘Cookie: cookie说的直白点就是保存在用户浏览器端的一个键值对,举个例子,你现在登录了京东商城,你把浏览器关闭之后,你再打开京东,你还是可以对你的账户继续操作,已经购买的商品,订单都是可 ...
随机推荐
- lua的table库
函数列表: table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j] ...
- 《CCNA(640-802)全套课程讲义》笔记
路由器: CLI(命令行界面)形式相对应的是GUI (图形用户界面) DTE:数据终端设备,指的是位于用户网络接口的用户端设备,通常情况下,路由器端为DTE端. DCE:数据通讯设备,为通信提供时钟 ...
- centos7搭建python3并和python2共存
注意事项:1.非root帐号加上sudo2.centos7自带Python 2.7.5是不能卸载的,很多系统级软件依赖这个 安装依赖# yum -y groupinstall "Develo ...
- C#中模拟用户登陆SharePoint网站
自动化测试一个SharePoint网站,首先要登陆,我们今天就模拟一下用户登陆SharePoint网站的过程,这一过程可以通过其他方式完成模拟,比如通过Coded UI Test录制脚本会更方便,但是 ...
- 一款由jquery实现的超炫的页面加载特效
今天为大家带来一款由jquery实现的超炫的页面加载特效.连续的几个页面分开特效.最后由三维的线条由远至近消失,然后由近至远出现.效果超级梦炫.一起看下效果图: 在线预览 源码下载 实现的代码. ...
- Disable Maven Nature和disable workspace resolution
1.Disable Maven Nature myeclipse更新maven的时候,手抖了一下,点上了Disable Maven Nature,然后工程右键菜单中的Maven栏就不见了! 其实这是把 ...
- if的另一个实现思路
在一些场景中需要根据根据一个传入的额值来做不同的处理,而且if有很多层,此时如果一直写if代码就会雍容.一种比较好的方法就是写一个map列出与if对应的情况,然后map的value就能放一些方法或者其 ...
- System类及其getProterties( )和getProperty( )
System这个类来源: public final class System extends Object System类包含若干个有用的类字段和方法,而且不能被实例化.System类提供的工具包括标 ...
- pku oj overhang叠加卡片求最少的卡片数
这个估计是里面第二简单的了,因为第一简单的是求a+b 哈哈,一submit就ac了 题目如下: Description How far can you make a stack of cards ov ...
- 浅谈WebService的调用<转>
0.前言 前段时间,公司和电信有个合作,产品对接电信的某个平台,使用了WebService接口的调用,实现了业务受理以及单点登录.终于使用到了WebService,楼主还是比较兴奋的,目前功能已经上线 ...