Day 7: Http 和 Https
Why?
当在网络上传输一些私人,敏感信息时,应该采用加密的手段来保证这些信息在传输的过程中不被侦测到。Https协议正是这种实现机制。
Https是一种广泛使用的安全通信协议,下面是维基百科对它的定义:
超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混。- Wikipeida http://zh.wikipedia.org/zh/HTTPS
使用http协议来传输数据时不安全的,因为任何人都可以截获你的信息,获悉你传送的内容。作为一名测试工程师,你可以扮演一下“中间人攻击”(man in the middle attack)
How?
检查你的连接是否安全最简单的方法就是看看浏览器的地址栏,看有没有https。有的浏览器还会显示一个锁来暗示你的连接是安全的。如今有越来越多的工具可以检测你的连接是否安全。有一些浏览器插件可以强制你以SSL加密你的连接。
如果一个站点不是加密的,那么你就可以通过在web客户端和服务器端放置web代理(proxy)来截获之间的信息。
你可以使用一些工具,如Burpsuite, Charles Proxy或则Fiddler来截获信息,不单单浏览器发送给服务器间的信息可以被截获,服务器返回的信息同样可以被截获。
一旦你通过代理工具截获了信息,你就可以尝试着做一些测试,攻击。
你可以看看这些截获的信息中是否有一些个人信息,这些蛛丝马迹的信息可以被用作社会工程学的攻击上来哦。
如果你把截获的信息删除了,看看会发生什么?会有信息丢失吗,状态丢失,客户端crash了没,服务器端呢,还是已经做了处理,什么都没发生
修改你截获信息中的值,然后将它发送给服务器。有很多例子,购买商品的价格是放在未加密的信息中的,你可以很简单就将商品的价格调整为你想要的价格了。
同样,你可以做同样类似的攻击,来篡改服务器发送给客户端的信息。利用你截获信息,还可以做一些其他攻击。
拦截信息不单单是安全问题。有很多例子,在很多web系统中发生过因为信息丢失而导致的悲剧。在利用代理服务器截获信息后,可以尝试各种各样的测试,你会发现哪些是有效的,能发现问题,有一些测试则不行,这就是你的经验。,在做这些测试的过程中,你还又会有一些新的点子。
小建议:
在很多测试环境,是没有配置https安全证书的,在线下还是测试一下确保不会有https或则ssl的bug。
有帮助的链接
Good security for web checklist – http://www.techrepublic.com/blog/security/ensure-basic-web-site-security-with-this-checklist/424
Differences between http and https - http://www.virtu-software.com/ask-doug/QandA.asp?q=7
Another differences post - http://www.wisegeek.com/what-is-the-difference-between-http-and-https.htm
Burpsuite - http://portswigger.net/burp/
Day 8: Client and server watching 客户端和服务器端的监控
Why ?
作为一名测试工程师,在测试一个站点时,关注屏幕背后发生了什么,对我们会更有帮助。
在访问一个站点,与之交互的过程中,会有一些前端(浏览器端)和后台服务逻辑在处理这交互过程。对于一名测试工程师而言,在前端和后台服务器之间流动的信息,以及处理逻辑,就是你的重点。
也许你会使用CSS样式来进行网页风格的设计,点击页面上的一个链接或做一个操作,会发送一个请求到服务器端,或前端JS脚本就帮你处理掉了(比如计算两个数的和)。换句话说,用户需要他在也页面上做了一个操作,他不需要关心这个操作是如何实现的,这背后发生了什么,但作为一名测试同学,你应该关注这些。
下面来看一个例子,一个简单的“登入”会映射到那些动作呢?
- 用户:打开浏览器,输入网址
- 浏览器:浏览器向服务器请求登入页面
- 服务器:接受到客户端的请求,并返回相应的页面
- 浏览器:向用户展示服务器返回的页面
- 用户:用户输入用户名、密码,并点击“登入”按钮
- 浏览器:以加密的方式将用户信息(用户名、密码,要访问的页面)这些信息发送给服务器
- 服务器:检查这些验证信息,身份验证成功,跳转至用户需要访问的页面。
- 浏览器:页面渲染载入
通过这个简单的例子说明,即便是一个简单的“登入”操作,其也会产生多条信息,并涉及多处的逻辑。如果是更复杂的例子,就会有前端逻辑校验,或则服务器端会调用别处的web service服务。
作为一个测试同学,你就要探究屏幕背后发生了什么?你的应用是如何工作的?它会发送哪些信息,接受哪些信息。理清楚这些信息,对你了解整个系统将很有帮助。你可以记下一些概要信息:可以包括一些测试思路,系统这么处理的存在的问题,好处等。
还有一些有意思的:
- 发送、接收到的信息是否正确
- 页面布局是否如预期那样
- 响应是否及时
- 如果发生超时,对服务器有何影响
- 代码中是否存在错误
- 如果传过去的值为X,则
- 如果将X值去掉,则
- 如果在传输的过程中,信息丢失了,会发生什么
How?
大多说Web Tester都用过这三个工具(我就是用这三种工具的,也许还有其他一些功能强大的工具)
Charles Proxy
Charles Proxy是个很棒的工具,可用户嗅探web 请求(监控,拦截web 请求)。你可以验证截获的内容,看是不是和定义的一致,你也可以篡改请求,发送一个非法的请求到服务器。
Charles Proxy最有用的一个功能就是,限制(throttle)浏览器和服务器之间的网络带宽。后续章节还会讲到这个功能。
Fiddler
Fiddler名字有点怪怪的,但这是测试同学的必备杀器哦。某种程度上讲,它的功能和Charles Proxy有点类似,但它提供了更丰富的界面,并可以通过命令行操作。
Firebug
我一直使用Firefox来做web测试,因为Firefox有很多插件。其中,Firebug是日常工作离不开的一个扩展。
我主要用到Firebug的这些功能:
- 观察客户端和服务器端的网络交互
- 提醒我,代码或message错误
- 显示页面载入速度
- 检查页面元素,主要在写ui自动化时需要
- 改变CSS, 并查看修改后页面渲染效果
提示
还有一个插件叫“Fire Cookie”,它可以扩展Firebug的功能,使之可以管理系统中的Cookies
链接
Charles Proxy - http://www.charlesproxy.com/
Fiddler - http://fiddler2.com/fiddler2/
Firebug - http://getfirebug.com/
Firecookie - https://addons.mozilla.org/en-US/firefox/addon/firecookie/
Day 9: 安全
Why?
web安全是一个热门话题。的确,安全无小事,用户的数据和以及做了在你的站点上所做操作,都应该是安全的。
我认为,所有的测试同学都应该掌握一些基本的安全测试技能。至少,应该都知道OWASP上面列举出来的Top10安全漏洞。
有一些测试工具和测试技巧可以帮着发现那些明显的安全漏洞。对于核心系统,我建议请专业的公司来做专门的“渗透测试”。
How?
对你的应用做安全测试,最简单的办法就是下载一个扫描工具,如Burpsuite。也有一些其他工具,但Burpsuite是市面上最合适的工具,WebScarab也不错啦。
Bursuite的免费版本已经提供了做安全测试所需要的大部分功能。Burpsuite中的“Scanner”功能只对付费版可用,如果你需要日常进行安全性测试,我建议你买个付费版。
Scanner可以自动扫描你的应用,寻找漏洞。真正强大的在于,它知道到哪些地方存在漏洞,传递什么样的数据,已经发现了漏洞后,如何处理。
安全测试这个话题太大了,可以找本专门的书翻一番,列出常见的风险点,如何嗅探出漏洞进行深度攻击。这是个很大的topic,也有很多这方面的资料。
提示
如果你产品在Salesforece APP,你将得到Burpsuite的免费license.
链接
Burpsuite - http://portswigger.net/burp/
Web Scarab - https://www.owasp.org/index.php/WebScarab_Getting_Started
Web Hackers book - http://www.amazon.co.uk/Web-Application-Hackers-Handbook-
Discovering/dp/0470170778
OWASP Top Ten - https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
Plynt Security Testing Experts - http://www.plynt.com/
Salesforce Burpsuite for App Exchange Partners - http://security.force.com/webappscanner
Start with the treat profile - http://www.securityalliance.co.uk/blog/bid/40335/Web-Application-Security-Testing-Start-with-the-Threat-Profile
Firefox add-ons (search for “security”)- https://addons.mozilla.org/en-US/firefox/
Day10: Browser Extensions 浏览器扩展
Why ?
市面上大部分浏览器都可以通过add-ons来添加额外的功能(有时候称为扩展,插件)。这些扩展可以帮助测试同学深入了解你所测的系统,这里仅列举我所熟知的一些。
Selenium IDE http://seleniumhq.org/projects/ide/
Selenium已经成为了行业标准,这里是IDE版本。
IE Tab https://addons.mozilla.org/en-US/firefox/addon/1419
实现Firefox的分页调IE的引擎渲染页面
Firesizer https://addons.mozilla.org/en-US/firefox/addon/5792
可调整窗口大小至你想要的浏览器尺寸
Fire cookie https://addons.mozilla.org/en-US/firefox/addon/6683
查看和管理Cookies
Delicious https://addons.mozilla.org/en-US/firefox/addon/3615
书签管理服务,不会遗漏你感兴趣的站点,并分享到你的社区里
Clear Cache https://addons.mozilla.org/en-US/firefox/addon/1801
一键Cache清理
Copy Plain Text https://addons.mozilla.org/en-US/firefox/addon/134
页面内容以纯文本格式保存
Fiddler Hook http://www.fiddler2.com/fiddler2/addons/fiddlerhook/
Fiddler 插件
Download Status https://addons.mozilla.org/en-US/firefox/addon/26
在浏览器工具栏显示你的下载状态,方便的访问你所下载的东西
Xmarks https://addons.mozilla.org/en-US/firefox/addon/2410
保存你的书签,并可以在不同机器间同步。
W3C Page Validator https://addons.mozilla.org/en-US/firefox/addon/2250
检查页面是否符合 W3C 标准
Pencil https://addons.mozilla.org/en-US/firefox/addon/8487
web页面原型设计工具,很多人吐血推荐
SQL Injection https://addons.mozilla.org/en-US/firefox/addon/6727
你懂的
Quick Restart https://addons.mozilla.org/en-US/firefox/addon/3559
重启Firefox ,并重新打开所有分页
Firebug https://addons.mozilla.org/en-US/firefox/addon/1843
离开了它,你就别测web了
Regular Expressions Tester https://addons.mozilla.org/en-US/firefox/addon/2077
正则表达式测试
Quick Locale Switcher https://addons.mozilla.org/en-US/firefox/addon/1333
快速切换浏览器的locales
Http Fox https://addons.mozilla.org/en-US/firefox/addon/6647
Http流量分析工具
TAW3 https://addons.mozilla.org/en-US/firefox/addon/1158?src=api
可访问性测试工具
Firefox Accessibility Tools https://addons.mozilla.org/en-US/firefox/addon/5809?src=api
可访问性测试工具
知道这些工具仅仅是一个开始,你可以想象这些工具将对你的工作多有帮助。这些扩展可以提高你的工作效率,使得之前没法做的测试变得可能,一些繁琐的工作也可以交个这些工具来。
上面列出的是一些firefox的扩展工具,同样chrome也会有自己的扩展。
How?
打开Firefox > Tools > Add-ons > Extensions,查询下载扩展插件
提示:
你知道如何使Firefox更快的加载吗?
- 在地址栏输入“about:config”,回车
- 点击“我保证会小心”按钮
- 右击,“新建”>整数:命名为“nglayout.initialpaint.delay”
设值为:0(这个值就是告诉Firefox,当接受到服务器返回时,等待0s,载入页面)
- 在搜索栏里输入“network.http”
- 将“network.http.pipelining”设为true
- 将“network.htpp.proxy.pipelining”设为true
- 将“network.http.pipelining.maxrequests”设为20 (这个值表示浏览器的并发请求数)
链接
Main extensions website for Firefox - https://addons.mozilla.org/en-US/firefox/extensions/
Chrome extensions - https://chrome.google.com/webstore/category/extensions
Opera extensions - https://addons.opera.com/en/addons/extensions/
Safari extensions - http://extensions.apple.com/
Cool hacks to Firefox like making it quicker - http://www.lifehack.org/articles/technology/15-coolest-firefoxtricks-ever.html
Day 11: Back to the beginning again 返回上一页
Why ?
网站的安全性不仅仅是考虑跨站攻击,SQL注入,中间人攻击这些,有些时候仅仅是点击“返回上一页”箭头,查看之前一个浏览者的访问信息 ,这也是一个看似简单,但也十分有效的安全缺口。
举个例子,你在一个网路咖啡屋,登入了你的网上银行。接着退出了网银,但浏览器窗口没有关闭,然后离开了咖啡馆。那么完全有可能下一个使用电脑的人,只需点击一下“后退一步”按钮,就可以看到你银行账户信息。
请相信,这的确发生过。
How ?
简单的测试方法就是通过身份验证,登入你的应用。然后,退出,接着点击浏览器的“返回上一页”按钮,看看会发生什么?
浏览器一般都可以一下子向上返回好几页,网上返回三,或四页,看看你能看到什么信息?
让我们来看看这些bug会引起什么问题?
- 你可以在线为一个候选人投票,然后点击“转到上一页”,再投一次,再投一次
- 只可以使用一次红包,通过点击“转到上一页”,使用多次。
- 通过点击后退按钮,你看到其他人的访问网页时留下的个人信息。
建议:
把鼠标放在后退按钮上,然后按着不动,就会列出之前访问网页的列表
链接:
Stack Overflow question on disabling back capability (which you cannot by the way) -
http://stackoverflow.com/questions/7816195/how-to-disable-back-button-in-browser-when-user-logout-inclassic-asp
IE security problem with the Back Button.
http://www.wired.com/science/discoveries/news/2002/04/51899?currentPage=all
Day 12: Change the URL 修改URL
Why ?
一个好的测试,通过修改你所登入站点的URL,看你是否可以访问到本不属于你的内容,来发现隐藏的身份验证类的bugs。
你也可以尝试通过修改URL,看能否修改发送或接受到的数据。
How?
Bypass Authentication 绕过身份验证
首先,你要弄明白,你的站点是如何组成的,由哪一些页面可以跳转至其他哪些页面?
接着,通过概要图来理清楚你的想法,想想如何尝试着欺骗你的应用
登入你的应用,做一些操作,例如,提交一些信息,查看一些敏感信息。把每个页面的URL记录到你的笔记本上。
一旦建立了概要图,并列出来URL, 就退出去。现在session连接应该已经断了,清空cache,删除cookies,并重新打开浏览器,确保你的环境是干净的。
现在,将你刚保存的URL复制到浏览器地址栏,回车,看会发生什么?因为你之前的Session已经断了,所以你不应该能够访问那些需要身份验证的网页。
你也可以以其他人的身份登入,然后输入刚保存下来的URL,有一些URL保存着账户、个人特定信心,所以需要身份验证才可以访问,看看如果以其他人的身份验证的,会发生什么
你能够看到其他人的账户吗?
是否被要求重新身份验证呢?
能看出这个账户是谁的吗?
Change the URL 修改URL
另一个常用的欺骗手段就是,看看URL里面是否有一些可以改变的值?
比如,
www.thisisanexample.com/banktransfer/rate=12.33
一个很明显的测试点就是,修改rate的值,看看会发生什么
如果将rate设为负数呢?如果去掉rate的值呢?
在写这本书的时候,在新闻中看到,有一家大型全球银行的网站,就有一个类似的URL , 展示给登入用户的URL包含一个账户id。通过修改id为另一个用户的,就可以访问这个用户的银行账户了。这是一个很简单的测试,但常常被忽略。这是一个有数百万用户的大型银行的线上bug,但它的确发生了。
上面提到的两个测试点,值得深入的做探索式测试。
挖掘信息,记录下来发生了什么,寻找线索,和潜在的安全缺口,还有就是,要学习一下潜在的URL 劫持技术。
建议
使用selenium这样的录制工具,它会在脚本里记录下来每一个访问的URL。这是一个很好的办法来记录下站点的所有URL。
链接
Selenium - http://seleniumhq.org/
Day 13: Tab Order Tab顺序
Why ?
很多人,在访问网页,在网页操作时,是不使用鼠标的。
如果页面的Tab顺序设置是没有逻辑的,这将使得使用键盘访问网页变得很困难,没有逻辑性,有时候甚至不可能。
测试Tab顺序,看起来很简单,但也要考虑页面的渲染,刷新,隐藏所选择的内容时所使用的技术,这些都将影响页面整体的Tab顺序。
How ?
举例,一个Form表单里面包含10个问题,如果tab顺序是设置合理的,那么你通过按tab键,就可以以合理的顺序遍历这十个字段(从左到右,从上至下的顺序)
同时,这个表单还有一个功能,如果用户第二个问题选择了true ,那么就会展示出第十一个,第十二个问题。这时候,就需要确保第十一,十二个问题也在tab顺序中,很多情况下,这两个字段就被忽略掉了。
建议:
按着shift+tab键,做反向的tab顺序,反向tab和正向的tab一样重要。
链接:
Tabbing in HTML guidelines - http://www.w3.org/TR/html4/interact/forms.html#h-17.11.1
Web Aim guide to changing tab orders - http://webaim.org/techniques/keyboard/tabindex