在消息产生、流转的各个环节中,需要保证消息传输安全性、消息存储安全性、消息内容安全性。

一、消息传输安全性

消息传输的重要防范点有两个,一是访问入口安全,二是传输链路安全。
1.HttpDNS保证访问入口安全
访问入口指的是即时消息服务中提供的一个公网的接入服务,作为用户收发消息的出入口,它通过域名的方式提供给客户端。常见的问题有DNS劫持。
DNS劫持的原因
1)路由器的DNS设置被非法侵入篡改;
2)运营商的LocalDNS可能会导致接入域名的解析被劫持。
这里先解释一下:LocalDNS是部分运营商为了降低跨网流量,缓存部分域名的指向内容,把域名强行指向自己的内容缓存服务器的IP地址。

  • 运营商可能会修改DNS的TTL(time-to-live,DNS缓存时间),导致DNS的变更生效延迟,影响服务可用性。
  • 运营商可能为了减轻自身的资源压力,把DNS请求转发给其他运营商解析,这样分配的IP地址可能存在跨运营商访问的问题,导致请求变慢甚至不可用。

防止DNS劫持的方法
1)如果是路由器的DNS被篡改,可以重置路由器的配置,修改路由管理登录密码。
2)如果是运营商LocalDNS的域名劫持和调度错误,可以使用HttpDNS。

  • HttpDNS绕开了运营商的LocalDNS,通过HTTP协议来直接和DNS服务器交互,有效防止域名被运营商劫持。
  • HttpDNS服务器能够获取到真实的用户出口IP,因而能选择离用户更近的节点进行接入,或者一次返回多个接入IP,使客户端通过测速等方式选择速度更快的接入IP,使接入调度更精准。

2.TLS传输层加密协议保证传输链路安全
消息传输链路出现问题主要有以下几个原因:
1)中断:攻击者破坏或切断网络,破坏服务可用性,属于主动攻击;
2)截获:攻击者非法窃取传输的消息内容,属于被动攻击;
3)篡改:攻击者非法篡改传输的消息内容,破坏消息的完整性和真实语义;
4)伪造:攻击者伪造正常的通讯消息模拟正常用户或者模拟IM服务端。

针对第一种原因,可以采取多通道方式提升链路可用性,从而解决消息链路中断;
针对后三种原因,可以利用私有协议和TLS(消息内容加密)进行防控

TLS巧妙地把“对称加密算法”、“非对称加密算法”、“密钥交换算法”、“消息认证码算法”、“数字签名证书”、“CA认证”进行结合,有效地解决了消息传输过程中的截获、篡改、伪造问题。

二、消息存储安全性

如果消息存储在服务端,不管消息内容是明文还是密文,都会存在泄露的风险。保证消息内容存储安全性的最好方式是:
1.消息内容不在服务端存储(这个没啥好说的,估计大部分场景都需要存储在服务端);
2.消息内容采用“端到端加密”(E2EE),中间任何链路环节都不对消息进行解密,这样除了收发双方,其它任何中间环节都无法获取消息原文内容。

“端到端加密”之所以更加安全,是因为和服务端TLS加密不一样。
它是由通信双方各自生成密钥对并进行公钥的交换,私钥各自保存在本地不给到IM服务端。
发送方的消息使用接收方的公钥来进行加密,因此即使IM服务端拿到了加密消息,也会因为没有接收方的私钥无法解密。

三、消息内容安全性

内容安全性主要指的是内容的识别和传播的控制,一般依托于第三方的内容识别服务来进行防范。常见的方案有:
1.建立敏感词库,针对文字内容进行安全识别。
2.依托图片识别技术来对色情图片/视频/广告、涉政图片等进行识别、处理。
3.使用“语音转文字”和OCR(图片文本识别)辅助图片、语音的进一步挖掘识别。
4.通过爬虫技术对链接进行分析,识别“风险外链”。

对于IM服务端来说,要做的是建立与“识别”配套的惩罚处置机制,比如识别到群里有人发色情图片,就对该用户进行“禁言”处理,或者进行“解散群”的操作,具体业务具体分析。

《即时消息技术剖析与实战》学习笔记6——IM系统如何保证消息的安全性的更多相关文章

  1. 《即时消息技术剖析与实战》学习笔记4——IM系统如何保证消息的可靠性

    IM 系统中,保证消息的可靠投递主要体现在两方面,一是消息的不丢失,二是消息的不重复. 一.消息不丢失 消息丢失的原因 首先看一下发送消息的流程,如下图所示: 消息.可以采取"时间戳比对&q ...

  2. 《即时消息技术剖析与实战》学习笔记5——IM系统如何保证消息的一致性

    一.什么是消息一致性 消息一致性指的是消息的时序一致性,即消息收发的一致性.如果不能保证时序一致性,就会造成聊天语义不连贯,引起误会. 对于点对点的聊天场景,时序一致性保证接收方的接收顺序和发送方的发 ...

  3. 《即时消息技术剖析与实战》学习笔记3——IM系统如何保证消息的实时性

    IM 技术经历过几次迭代升级,如图所示: 从简单.低效的短轮询逐步升级到相对效率可控的长轮询: 全双工的 Websocket 彻底解决了服务端的推送问题: 基于 TCP 长连接衍生的 IM 协议,能够 ...

  4. 《即时消息技术剖析与实战》学习笔记1——IM系统的架构

    一.IM的应用场景 聊天.直播.在线客服.物联网等所有需要实时互动.高实时性的场景,都需要应用到 IM 技术.

  5. 《即时消息技术剖析与实战》学习笔记12——IM系统如何提升图片、音视频消息发送、浏览的体验

    IM系统如何提升用户发送.浏览图片和音视频消息的体验呢?一是保证图片.音视频消息发送得又快又稳,二是保证用户浏览播放图片.音视频消息时流畅不卡顿. 一.提升用户发送图片.音视频的体验 1. 多上传接入 ...

  6. 《即时消息技术剖析与实战》学习笔记11——IM系统如何保证服务高可用:流量控制和熔断机制

    IM 系统的不可用主要有以下两个原因: 一是无法预测突发流量,即使进行了服务拆分.自动扩容,但流量增长过快时,服务已经不可用了: 二是业务中依赖的这些接口.资源不可用或变慢时,比如发消息可能需要依赖& ...

  7. 《即时消息技术剖析与实战》学习笔记7——IM系统的消息未读

    一.什么是消息未读 消息未读包括会话未读和总未读.前者指的是当前用户和某一聊天方的未读消息数,后者指的是当前用户的所有未读消息数,也就是所有会话未读的和.比如用户A收到用户B的2条消息,还收到用户C的 ...

  8. 《即时消息技术剖析与实战》学习笔记8——IM系统如何保证长连接的可用性:心跳机制

    假设有以下突发意外情况: 用户进入信号不好的地方,手机没有网络信号了 上网的路由器突然掉线了 这个时候,比如微信发消息,消息就会转圈圈,甚至变成红色叹号-- 上面情况都会导致"长连接&quo ...

  9. 《即时消息技术剖析与实战》学习笔记9——IM系统如何支持消息的多终端漫游

    一.什么是多终端漫游 多终端漫游是指:用户在任意一个设备登录后,都能获取到历史的聊天记录.如:QQ 默认漫游 7 天的聊天记录,开通 VIP 会员可漫游 30 天,开通 SVIP 会员可漫游 2 年. ...

随机推荐

  1. adb shell提示“adb server is out of date.” 解决方法

    [问题描述] 1.打开运行:window+R,输入cmd回车 2.使用命令 adb shell 无法登录安卓设备,提示如下: adb server is out of date.  killing.. ...

  2. 使用rider做为unity的代码编辑器

    使用Rider做的编写Unity代码的IDE,记录一些与VS不相同的笔记 安装和设置方法: 我使用Rider 2019.1 + Unity3D 2018.3.4,在安装完Rider之后,在Unity中 ...

  3. NLP中的预训练语言模型(三)—— XL-Net和Transformer-XL

    本篇带来XL-Net和它的基础结构Transformer-XL.在讲解XL-Net之前需要先了解Transformer-XL,Transformer-XL不属于预训练模型范畴,而是Transforme ...

  4. Python3——根据m3u8下载视频(下)之requests

    下半场ING,好吧,本来准备明天写的(拖延真快乐.gif),请然而,,,早上八点多跑公司加班(看书+学习)去,发现大门上挂着一把大锁,我只想说门禁是拿来看的嘛,加啥破锁o(╥﹏╥)o,严重打击了好员工 ...

  5. 201871010135 张玉晶《面向对象程序设计(java)》第十六周学习总结

    第一部分:总结教材14.1-14.3知识内容 并发 • 线程的概念 • 中断线程 • 线程状态 • 多线程调度 • 线程同步 一.线程的概念 1. 程序是一段静态的代码,它是应用程序执行的蓝本. 2. ...

  6. python字典基本操作

    字典是python中五中基本数据类型之一,虽然它的赋值稍微麻烦点,但用起来真的是很方便.它用键值对来存放数据,所谓键值对,就是一个键,对应一个值,如果后面对前面的键再次赋值,第一次的值就被覆盖掉.像是 ...

  7. nginx配置代理时参数说明

  8. 不使用xftp上传/下载文件到linux

    yum install lrzsz    # 安装软件 window端上传到linux端: 1. window端先压缩需上传的文件 2. linux端运行命令rz 3. 在弹出的窗口选择压缩好的文件, ...

  9. AtCoder Grand Contest 037题解

    传送门 \(A\) 直接把每个字母作为一个字符串,如果某个串和它前面的相同,那么就把这个字母和它后面那个字母接起来.然而我并不会证明这个贪心的正确性 //quming #include<bits ...

  10. [LeetCode] 327. Count of Range Sum 区间和计数

    Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Ra ...