当前位置:首页>HTTP>HTTPS>HTTP的缺点

HTTP的缺点

作者:微学网发布时间:2019-09-07 21:57:37

HTTP的缺点和不足之处

  • 通信使用明文(不加密),内容可能会被窃听

  • 不验证通信方的身份,因此有可能遭遇伪装

  • 无法证明报文的完整性,所以有可能已遭篡改

这些问题不仅在 HTTP 上出现, 其他未加密的协议中也会存在这类问题。

除此之外, HTTP 本身还有很多缺点。

还有像某些特定的 Web服务器和特定的 Web 浏览器在实际应用中存在的不足(也可以说成是脆弱性或安全漏洞)。

Java 和 PHP 等编程语言开发的Web 应用也可能存在安全漏洞。

通信使用明文可能会被窃听

由于 HTTP 本身不具备加密的功能, 所以也无法做到对通信整体(使用 HTTP 协议通信的请求和响应的内容) 进行加密。 即, HTTP 报文使用明文(指未经过加密的报文) 方式发送。

TCP/IP 是可能被窃听的网络

根据tcp\/ip协议族的工作机制,通信内容可能会窥视到所有的通信线路。

所谓的互联网是由可以连接到整个世界的网络组成的。无论世界上哪一个角落的服务器都在与客户端通信,这条通信线上的一些网络设备、光缆、计算机等都不可能是个人的私有财产,因此不排除在某些链路上会发生恶意窥探。

即使是已经加密的通信也可以窥探通信内容,这与未加密的通信相同。这仅仅意味着,如果通信被加密,可能无法破解消息信息的含义,但加密后的消息本身会被看到。

窃听相同段上的通信并非难事。 只需要收集在互联网上流动的数据包(帧) 就行了。 对于收集来的数据包的解析工作, 可交给那些抓包(Packet Capture) 或嗅探器(Sniffer) 工具。

加密处理防止被窃听

在目前大家正在研究的如何防止窃听保护信息的几种对策中, 最为普及的就是加密技术。 加密的对象可以有这么几个。

通信的加密

一种方式就是将通信加密。 HTTP 协议中没有加密机制, 但可以通过和 SSL(Secure Socket Layer, 安全套接层) 或 TLS(Transport Layer Security, 安全层传输协议) 的组合使用,加密 HTTP 的通信内容。

用 SSL建立安全通信线路之后, 就可以在这条线路上进行 HTTP通信了。

与 SSL组合使用的 HTTP 被称为 HTTPS(HTTPSecure, 超文本传输安全协议) 或 HTTP over SSL。

内容的加密

还有一种将参与通信的内容本身加密的方式。 由于 HTTP 协议中没有加密机制, 那么就对 HTTP 协议传输的内容本身加密。 即把HTTP 报文里所含的内容进行加密处理。

在这种情况下, 客户端需要对 HTTP 报文进行加密处理后再发送请求。

为了实现有效的内容加密,前提是要求客户端和服务器都有加密和解密机制,主要用于web服务。需要注意的是,与ssl或tls不同,ssl或tls对整个通信线路进行加密,所以这种方式仍然存在篡改内容的风险。

不验证通信方的身份就可能遭遇伪装

HTTP 协议中的请求和响应不会对通信方进行确认。 也就是说存在“服务器是否就是发送请求中 URI 真正指定的主机, 返回的响应是否真的返回到实际提出请求的客户端”等类似问题。

任何人都可发起请求

在 HTTP 协议通信时, 由于不存在确认通信方的处理步骤, 任何人都可以发起请求。 另外, 服务器只要接收到请求, 不管对方是谁都会返回一个响应(但也仅限于发送端的 IP 地址和端口号没有被 Web 服务器设定限制访问的前提下) 。

HTTP 协议的实现本身非常简单, 不论是谁发送过来的请求都会返回响应, 因此不确认通信方, 会存在以下各种隐患。

  • 无法确定请求发送至目标的 Web 服务器是否是按真实意图返回响应的那台服务器。 有可能是已伪装的 Web 服务器。

  • 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。 有可能是已伪装的客户端。

  • 无法确定正在通信的对方是否具备访问权限。 因为某些Web 服务器上保存着重要的信息, 只想发给特定用户通信的权限。

  • 无法判定请求是来自何方、 出自谁手。

  • 即使是无意义的请求也会照单全收。 无法阻止海量请求下的 DoS 攻击(Denial of Service, 拒绝服务攻击)

查明对手的证书

虽然使用 HTTP 协议无法确定通信方, 但如果使用 SSL则可以。SSL不仅提供加密处理, 而且还使用了一种被称为证书的手段,可用于确定方。

证书由值得信任的第三方机构颁发, 用以证明服务器和客户端是实际存在的。 另外, 伪造证书从技术角度来说是异常困难的一件事。 所以只要能够确认通信方(服务器或客户端) 持有的证书,即可判断通信方的真实意图。

通过使用证书, 以证明通信方就是意料中的服务器。 这对使用者个人来讲, 也减少了个人信息泄露的危险性。
另外, 客户端持有证书即可完成个人身份的确认, 也可用于对Web 网站的认证环节。

无法证明报文完整性, 可能已遭篡改

所谓完整性是指信息的准确度。 若无法证明其完整性, 通常也就意味着无法判断信息是否准确。

接收到的内容可能有误

由于 HTTP 协议无法证明通信的报文完整性, 因此, 在请求或响应送出之后直到对方接收之前的这段时间内, 即使请求或响应的内容遭到篡改, 也没有办法获悉。

换句话说, 没有任何办法确认, 发出的请求 / 响应和接收到的请求 / 响应是前后相同的。

比如, 从某个 Web 网站上下载内容, 是无法确定客户端下载的文件和服务器上存放的文件是否前后一致的。 文件内容在传输途中可能已经被篡改为其他的内容。 即使内容真的已改变, 作为接收方的客户端也是觉察不到的。

像这样, 请求或响应在传输途中, 遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack, MITM) 。

如何防止篡改

虽然有使用 HTTP 协议确定报文完整性的方法,但事实上并不便捷、可靠。其中常用的是 MD5 和 SHA-1 等散列值校验的方法,以及用来确认文件的数字签名方法。

提供文件下载服务的 Web 网站也会提供相应的以 PGP(Pretty GoodPrivacy,完美隐私)创建的数字签名及 MD5 算法生成的散列值。PGP 是用来证明创建文件的数字签名,MD5 是由单向函数生成的散列值。不论使用哪一种方法,都需要操纵客户端的用户本人亲自检查验证下载的文件是否就是原来服务器上的文件。浏览器无法自动帮用户检查。

可惜的是,用这些方法也依然无法百分百保证确认结果正确。因为 PGP 和MD5 本身被改写的话,用户是没有办法意识到的。

为了有效防止这些弊端,有必要使用 HTTPS。SSL 提供认证和加密处理及摘要功能。仅靠 HTTP 确保完整性是非常困难的,因此通过和其他协议组合使用来实现这个目标。