>版权申明】非商业目的注明出处可自由转载

博文地址:

出自:shusheng007

@[toc]

概述

毫无疑问在现今的中国,网络已经成为广大人民群众日常的基本生活资料,我相信网络在极大丰富人民群众日常生活的同时,网络安全问题在中国将变得日益突出,如果你有志于投身计算机行业,相信网络安全是一个不错的方向。 而在Web的世界里,Http家族绝对是霸主。而且前段时间,二狗公司的产品疑似发生了被攻击事件,后来证实是Vendor误报,在此过程中也迫使二狗对现在产品的网络安全设计做了一个审视。其中用到了Basic Authentication,我们今天就谈谈Http的安全认证机制。

HTTP 的认证机制

http协议支持两种认证方式:基本认证和摘要认证。

什么是认证

认证就是要给出身份证明,证明你就是你声称的那个人。

例如王二狗和牛翠花两个人在网上都互动半年了还没有见面,于是二狗向翠花发出了诚挚的邀请:翠花,五一来天津玩吧,我请你吃麻辣烫!本来二狗想先视频一下到时候好认人,但翠花说那样就没有惊喜感了。于是两人就采取了最原始的认证方式:对暗号,到时候翠花喊:天王盖地虎。二狗就喊:翠花好漂亮。

HTTP 基本认证

大体流程就类似于牛翠花和王二狗接头的过程。 1.翠花:走到一个人面前说,二狗带我去吃麻辣烫吧。 2.二狗:请说出你的暗号。 3. 翠花:天王盖地虎。 4.二狗:张亮麻辣烫走起。。。

映射到编程领域为:

  1. 客户端(例如Web浏览器):服务器,请把/family/son.jpg 图片传给我。
    GET /family/son.jpg HTTP/1.1 2. 服务器:客户端你好,这个资源在安全区family里,是受限资源,需要基本认证,请带上你的用户名和密码再来 HTTP/1.1 401 Authorization Required www-Authenticate: Basic realm= "family" 服务器会返回401,告知客户端这个资源需要使用基本认证的方式访问,我们可以看到在 www-Authenticate这个Header里面 有两个值,Basic:说明需要基本认证,realm:说明客户端需要输入这个安全区的用户名和密码,而不是其他区的。因为服务器可以为不同的安全区设置不同的用户名和密码。如果服务器只有一个安全区,那么所有的基本认证用户名和密码都是一样的。 3. 客户端: 服务器,我已经按照你的要求,携带了相应的用户名和密码信息了,你看一下
    如果客户端是浏览器,那么此时就会弹出一个弹窗,让用户输入用户名和密码。
    Basic 内容为: 用户名:密码 后的base64 内容.假设我的用户名为Shusheng007,密码为ss007 那么我的Basic的内容为 Shusheng007:ss007 对应的base64 编码内容U2h1c2hlbmcwMDcldUZGMUFzczAwNw==,如下所示 GET /family/son.jpg HTTP/1.1 Authorization: Basic U2h1c2hlbmcwMDcldUZGMUFzczAwNw== 4. 服务器:客户端你好,我已经校验了你的用户名和密码,是正确的,这是你要的资源。 HTTP/1.1 200 OK Content-type: image/jpg ...

至此这个HTTP事务就结束了,非常简单的一个认证机制,不过缺点也是蛮多的。

HTTP 基本认证的优缺点

优点

简单,被广泛支持

缺点

不安全

安全分几个层面:内容的篡改及嗅探。这是HTTP协议本身存在的问题,所以很难根除,以后的网络世界会慢慢全部转为使用更加安全的HTTPS的。

1 用户HTTP是在网络上裸奔的,所以这个基本认证的用户名和密码也是可以被人看到的,虽然它使用了Base64来编码,但这个编码很容易就可以解码出来。

2 即使这个认证内容不能被解码为原始的用户名和密码也是不安全的,恶意用户可以再获取了认证内容后使用其不断的享服务器发起请求,这就是所谓的重放攻击

3 像中间人攻击就更不能防止了,中间人可以修改报文然后请求服务器。

HTTP 基本认证使用场景

内部网络,或者对安全要求不是很高的网络。现如今HTTP基本认证都是会结合HTTPS一起使用的,https保证网络的安全性,然后基本认证来做客户端身份识别。

在结合了HTTPS后,Basic Authentication 可以说还是有一定的市场的,但是其重要性正在降低。因为合适的使用场景太少。我们可以想象一下:如果服务器是允许匿名用户访问的,那你就没有必要认证。如果服务器是不允许匿名访问的,那么需要用户注册,就会使用用户凭证认证,也不需要基本认证。只有那种只需要一个特定密码就可以访问的场景,例如加了提取码的网盘资源。

我们公司移动APP端使用到了基本认证,用来认证某个到我们服务器的请求是从我们自己的APP发出的,而不是异常来源。

发表评论

邮箱地址不会被公开。 必填项已用*标注