前言

大家好,我是蜗牛,在上一篇中,我们介绍了不同版本的HTTP区别和发展背景,这篇文章我们来聊聊HTTP的缺点,HTTP缺点大致总结有以下三点:

  • 通信使用明文(不加密),内容可能会被窃听。
  • 不验证通信方的身份,因此有可能遭遇伪装(客户端和服务端都有可能)
  • 无法证明报文的完整性,有可能会被篡改。

其实以上问题不止HTTP有,其他未加密的协议也有此类问题,下面就以上三点详细介绍

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

因为HTTP不具备加密的功能,所以无法对通信报文进行加密,所以是使用明文进行发送,那么就有可能被窃听。

可以看到窃听无处不在

窃听的方式有多种,比较常见有抓包工具(Wireshark)或者嗅探器(Sniffer)等工具,进行窃听。

下面图片是使用Wireshark抓取的数据:

如何防止

  • 通信的层加密

    通过HTTP与SSL/TLS的组合使用(SSL/TSS后续章节介绍),可以加密http通信内容。

  • 通信报文内容加密

    双方约定好密钥,在传输前对原报文进行一个加密,传输至服务端或客户端在进行解密,因为此类方式不同于https方式,所以还是有一定的风险。

    • 密钥不是一次一密,而且是内嵌在代码中,都有可能被获取。
    • 如果是基于浏览器的工程,那么这个密钥是内嵌在js中的,而js是可以访问的,那么就有可能被获取。
    • 如果是app工程中,也有可能被反编译获取。

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

HTTP协议的请求与响应不会对通信方进行身份的确认,因此这种无法确认通信方,总结有以下几类问题:

  • 无法确定请求目标的Web服务器是否,真正要访问的服务器。
  • 无法确定客户端是否是真实要响应的客户端。
  • 无法确定正在通信的双方是否具备访问权限,比如:提供的WEB服务只想开发给指定的客户端访问。
  • 无法判定请求来自何方,出自谁手。
  • 即使是无意义的请求,也会照单全收。如海量的Dos攻击。

如何防止

使用SSL才可以防止此类问题,SSL不仅提供加密功能,还提供证书,通过证书可以确定通信的方是意料之中的,这里肯定有人会问那证书如何保证可信呢?

证书是有公认值得信赖的CA机构颁发的,其他机构是没有颁发证书权限的。CA机构是可信赖的,那么颁发的证书也是可信赖的。

客户端验证服务端是否是可信的服务端,即单向认证。

客户端与服务端相互认证,即双向认证。

无法证明报文的完整性,有可能会被篡改

所谓完整性是指信息的准确度,无法证明完整性,那么也就无法判定信息是否准确。

由于HTTP协议无法证明通信的完整性,那么请求或者响应过程中报文就有可能被篡改,而服务端或者客户端是无法感知的。

比如从网上下载的内容,是无法确认下载后的内容是否跟服务器上的内容一致。

像这样在请求/响应途中,遭攻击者拦截并篡改内容攻击,称为中间人攻击。

如何防止

  • 使用md5/sha1/pgp来确定报文完整性的方法

点击下载后,可以查看对应文件签名或者散列值,当我点击MD5后,如下图:

通过对下载后文件在通过MD5生成散列码,与官网上的散列码进行比较,来确定文件是否被篡改。

但是从其他方式证明此种方式也不是绝对安全的,具体可以参见:http://bobao.360.cn/news/detail/768.html大概意思就是构造”前缀碰撞法“,来制造MD5值一样,文件内容不一样的文件。

总结

HTTP虽然使用极为广泛, 但是却存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付, 网络交易等新兴应用中安全方面最需要关注的

因此为了解决以上问题需要和SSL/TLS相关协议组合,这就是HTTPS,下篇我们介绍HTTPS

HTTP缺点有哪些,如何解决的更多相关文章

  1. Java并发编程之CAS第三篇-CAS的缺点及解决办法

    Java并发编程之CAS第三篇-CAS的缺点 通过前两篇的文章介绍,我们知道了CAS是什么以及查看源码了解CAS原理.那么在多线程并发环境中,的缺点是什么呢?这篇文章我们就来讨论讨论 本篇是<凯 ...

  2. jvm--4垃圾收集

    6. 垃圾收集GC (1)当需要排查各种内存溢出,内存泄漏等问题,当GC成为系统达到更高性能的瓶颈时,我们就需要对这些自动化的GC进行监控和调节. (2)PC计数器.本地方法栈.虚拟机栈,随方法或者线 ...

  3. python之协程与IO操作

    协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...

  4. ActiveMQ集群应用

    ActiveMQ集群 ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要由两种:Master-Slave和Broker Cluster. 1.M ...

  5. 可重入锁 公平锁 读写锁、CLH队列、CLH队列锁、自旋锁、排队自旋锁、MCS锁、CLH锁

    1.可重入锁 如果锁具备可重入性,则称作为可重入锁. ========================================== (转)可重入和不可重入 2011-10-04 21:38 这 ...

  6. Linux学习笔记15-YUM安装

    rpm软件包缺点:需要手工解决软件包的依赖关系.使用YUM可解决该问题. YUM(Yellodog Updater, Modified)是一个RPM前端程序,主要目的是设计用来自动解决RPM的依赖关系 ...

  7. OS存储器管理(一)

    存储器的层次: 分为寄存器.主存(内存)和 辅存(外存)三个层次. 主存:高速缓冲存储器.主存储器.磁盘缓冲存储器, 主存又称为可执行存储器: 辅存:固定磁盘存储器.可移动的外部存储器: 其可长期保存 ...

  8. Java垃圾收集算法介绍

    垃圾回收器GC(Garbage Collection) 一.引用计数算法(Reference Counting) 介绍:给对象添加一个引用计数器,每当一个地方引用它时,数据器加1:当引用失效时,计数器 ...

  9. 【MVC 4】8.SportsSore:管理

    作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 本文将继续构建 SportsStore 应用程序,为网站管理员提供一个管理产品分类的方法.本文将添 ...

  10. MySQL Replication浅析

    MySQL Replication是MySQL非常出色的一个功能,该功能将一个MySQL实例中的数据复制到另一个MySQL实例中.整个过程是异步进行的,但由于其高效的性能设计,复制的延时非常小.MyS ...

随机推荐

  1. SkiaSharp 之 WPF 自绘 五环弹动球(案例版)

    此案例基于拖曳和弹动球两个技术功能实现,如有不懂的可以参考之前的相关文章,属于递进式教程. 五环弹动球 好吧,名字是我起的,其实,你可以任意个球进行联动弹动,效果还是很不错的,有很多前端都是基于这个特 ...

  2. 技术分享 | Update更新慢、死锁等问题的排查思路分享

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 一.简介 在开始排错之前我们需要知道 Update 在 MySQL 中的生命周期 ...

  3. MES对接Simba实现展讯平台 IMEI 写号与耦合测试

    文章开始之前,必须对Simba工具点一个大大的赞,Simba为了适应市面上不同厂家开发的 MES 系统,特地开发了统一的接口,各个 MES 厂家只需要按照接口规范去做开发,然后将中间件加载到 Simb ...

  4. 求教:Knife4jAggregationDesktop访问报错HTTP ERROR 404

    (1)Windows Server 2019下面,java版本:c:\Users\WinUser01\.jdks\corretto-1.8.0_292\bin\java.exe(2)Knife4jAg ...

  5. 手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程

    点击上方 蓝字关注我们 最近,一些小伙伴反馈对小海豚的本地开发环境搭建过程不太了解,这不就有活跃的贡献者送来新鲜的视频教程!在此感谢@Tianqi-Dotes 的细致讲解 贡献者还贴心地录制了中英文两 ...

  6. DolphinScheduler - 1.3 系列核心表结构剖析

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用. 近日 ...

  7. Redis 09 基数

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 Redi ...

  8. mongo数据库-mongo角色权限

    Built-In Roles(内置角色): 1. 数据库用户角色:read.readWrite; 2. 数据库管理角色:dbAdmin.dbOwner.userAdmin: 3. 集群管理角色:clu ...

  9. MySQL-配置参数时 报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu......

    报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu...... 原因: 1.第一次配置参数时,不完整,出现错误!,(报错也会产生CMak ...

  10. RabbitMQ 入门系列:7、保障消息不重复消费:产生消息的唯一ID。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...