接口测试(六)--基本认证

【转载】

基本认证

有对盲人夫妇约定啪啪暗号,男人说:“打牌。”女人说:“开始。”隔壁小青年经常听到打牌,心想盲人怎么打牌呢?于是偷窥,一看原来如此。某日,小青年趁男盲人外出,溜进其家,对女盲人说:“打牌。”女盲人说:“开始。”于是两人啪啪了。小青年本领大,至hight处,女盲人连夸:“好牌。”到了晚上,男盲人又想与妻打牌,女盲人说:“你不是白天打了一次了吗?”男盲人一听,又急又气,惊呼:“不好,有人偷牌!”

----------------------------------进入正题--------------------------

HTTP协议是无状态的,就像两个盲人一样,彼此不能识别对方。

同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端

服务器需要通过某种方式了解访问用户的身份。一旦服务器知道了用户身份,就可以判断用户可以访问的事务和资源了。认证意味着要证明客户端访问用户是谁。通常情况是通过提供用户名和密码来认证的

一、什么是HTTP基本认证?

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

当浏览器访问使用基本认证的网站(如我们要下载论坛里面的某个附件http://120.25.145.237/upload/forum.php?mod=viewthread&tid=15)的时候, 浏览器会提示你登陆(输入用户名和密码),如下图

当浏览器访问使用基本认证的网站的时候, 浏览器会提示你输入用户名和密码,如下图

 

假如用户名密码错误的话, 服务器会返回401 如下图

 

二,认证原理

 

三、HTTP基本认证的过程

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

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

 

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

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

 

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

 

四、HTTP基本认证和HTTPS

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

五、HTTP OAuth认证

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

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

 

六、其他认证

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

七、基本认证的安全缺陷

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/woaixihongshi/p/8194206.html