接口测试之Fiddler+HTTP基本认证-阿里云开发者社区

开发者社区> 安全> 正文
登录阅读全文

接口测试之Fiddler+HTTP基本认证

简介: 一、什么是HTTP基本认证 客户端(桌面应用程序)通过HTTP协议跟Web服务器交互, 客户端一般不会使用cookie, 而是把 "用户名+冒号+密码"用BASE64编码的字符串放在http request 中的header Authorization中发送给服务端, 这种方式叫HTTP基本认证(Basic Authentication) 二、HTTP认证原理 1.认证原理 认证原理 a) 客户端请求了某个受保护文档。

一、什么是HTTP基本认证

客户端(桌面应用程序)通过HTTP协议跟Web服务器交互, 客户端一般不会使用cookie, 而是把 "用户名+冒号+密码"用BASE64编码的字符串放在http request 中的header Authorization中发送给服务端, 这种方式叫HTTP基本认证(Basic Authentication)

二、HTTP认证原理

1.认证原理

img_e06831923acaf880b3e16600be22b134.png
认证原理

a) 客户端请求了某个受保护文档。

b) 在客户端能够证明其知道密码从而确认其身份之前,服务器拒绝提供文档。服务器向客户端发起质询,询问用户名和摘要形式的密码。

c) 客户端传递了密码的摘要,证明它是知道密码的。服务器知道所有用户的秘密,因此可以将客户提供的摘要与服务器自己计算得到的摘要进行比较,以验证用户是否知道密码。另一方在不知道密码的情况下,很难伪造出正确的摘要。

d) 服务器将客户端提供的摘要与服务器内部计算出的摘要进行对比。如果匹配,就说明客户端知道密码(或者很幸运地猜中了!)。可以设置摘要函数,使其产生很多数字,让人不可能幸运地猜中摘要。服务器进行了匹配验证之后,会将文档提供给客户端——整个过程都没有在网络上发送密码。

2.握手机制

img_ba7b786e75c36d11767e83228ef98e1a.png
握手机制

(1) 服务器计算出一个随机数。

(2) 服务器将这个随机数放在 WWW-Authenticate 质询报文中,与服务器所支持的算法列表一同发往客户端。

(3) 客户端选择一个算法,计算出密码和其他数据的摘要。

(4) 客户端将摘要放在一条 Authorization 报文中发回服务器。如果客户端要对服务器进行认证,可以发送客户端随机数。

(5) 服务器接收摘要、选中的算法以及支撑数据,计算出与客户端相同的摘要。然后服务器将本地生成的摘要与网络传送过来的摘要进行比较,验证是否匹配。如果客户端反过来用客户端随机数对服务器进行质询,就会创建客户端摘要。服务器可以预先将下一个随机数计算出来,提前将其传递给客户端,这样下一次客户端就可以预先发送正确的摘要了。

三、HTTP认证过程

第一步: 客户端发送http request 给服务器。

第二步: 因为request中没有包含Authorization header, 服务器会返回一个401 Unauthozied 给客户端,并且在Response 的 header "WWW-Authenticate" 中添加信息。

img_aebde34fc775745acb0d07ad5ef1d9b7.png
图1

第三步:客户端把用户名和密码用BASE64编码后,放在Authorization header中发送给服务器, 认证成功。

第四步:服务器将Authorization header中的用户名密码取出,进行验证, 如果验证通过,将根据请求,发送资源给客户端。

img_6d829e01e9a40fca3d6f6853e9c8c437.png
图2

第五步:使用Fiddler Inspectors 下的Auth 选项卡,可以很方便的看到用户名和密码。

img_6d480ca3c3392ee004e0886786d30367.png
图3

四、HTTP基本认证和HTTPS

把 "用户名+冒号+密码" 用BASE64编码后的string虽然用肉眼看不出来, 但用程序很容易解密,上图可以看到Fiddler就直接给解密了。 所以这样的http request 在网络上,如果用HTTP传输是很不安全的。 一般都是会用HTTPS传输, HTTPS是加密的, 所以比较安全.

五、HTTP OAuth认证及其他认证

OAuth 对于Http来说,就是放在Authorization header中的不是用户名密码, 而是一个token.

微软的Skydrive 就是使用这样的方式, 如下图

img_df2a5792164e63213b2b445444019062.png
图5

其他认证:除了基本认证(Basic Authentication), 还有摘要认证 digest authentication, WSSE(WS-Security)认证。

六、基本认证的安全缺陷

1.基本认证通过网络发送用户名和密码,虽然进行base-64编码可以隐藏用户名和密码,但是很容易通过反向编码过程进行解码。

2.即使密码以更加难以解码的方式加密,第三方用户仍然可以捕获被修改过的用户名和密码,并通过重放攻击获取服务器的访问权限。

3.很多用户会将不同的服务使用相同的用户名和密码,基本认证直接发送用户名和密码,会对一些重要的服务(比如在线银行网站)造成威胁。

4.基本认证没有提供任何针对代理和中间人节点的防护措施,他们没有修改认证首部,但却修改了报文的其余部分,这样就严重的改变了事务的本质。

5.假冒服务器很容易骗过基本认证。如果在用户实际链接到一台恶意服务器或者网关的时候,能够让用户相信他链接的是一个受基本认证保护的合法主机,攻击者就可以请求用户输入密码。

6.IIS中站点默认开启匿名身份验证,并可以直接访问

资料来源1.hehffyy      2.测试部落-萌猫君

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: