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

一、消息传输安全性

消息传输的重要防范点有两个,一是访问入口安全,二是传输链路安全。
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. 实战讲解XXE漏洞的利用与防御策略

    现在许多不同的客户端技术都可以使用XMl向业务应用程序发送消息,为了使应用程序使用自定义的XML消息,应用程序必须先去解析XML文档,并且检查XML格式是否正确.当解析器允许XML外部实体解析时,就会 ...

  2. Can't toast on a thread that has not called Looper.prepare()

    Android开发中Can't toast on a thread that has not called Looper.prepare()问题 说一下问题出现场景: 在一个Android项目中,利用 ...

  3. mtime, atime, ctime 的区别

    mtime ls -l 显示最近修改文件内容的时间 atime ls -lu 显示最近访问文件的时间 ctime ls -li 显示最近文件有所改变的状态,如文件修改,属性\属主改变,节点,链接变化等 ...

  4. IBM LOTUS DOMINO 9 部署SSL证书

    前言 随着SHA1算法在2016年12月31日以后,将被强制淘汰,所有新的SSL证书都必须支持SHA256算法,所以我们必须将IBM Domino Server升级到9.0以上才可以支持SHA256算 ...

  5. python 登录并获取session,使用session新增ecshop的草稿

    ,"consignee":"冬天","email":"12345@qq.com","address" ...

  6. 第 33课 C++中的字符串(上)

    历史的遗留问题在C语言中没有真正意义上的字符串,为了表达字符串这个概念利用字符数组来模拟字符串.C语言不支持真正意义上的字符串 (C++也不支持)C语言用字符数组和一组函数实现字符串操作 (C++中同 ...

  7. 201871010128-杨丽霞《面向对象程序设计(java)》第六-七周学习总结

    201871010128-杨丽霞<面向对象程序设计(java)>第六-七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  8. 玩转淘宝SVN

    http://guojun2sq.blog.163.com/blog/static/64330861201492965059142/(参考) 三步走: 1.注册账号http://code.taobao ...

  9. com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor

    在MyBatis的配置文件中修改对pageHelper的配置修改前 <plugins> <plugin interceptor="com.github.pagehelper ...

  10. 多个页面进行爬虫 pycharm

    使用requests , lxml  ,xpath进行爬取并写入了TXT(也可以存入数据库).参考博客:https://blog.csdn.net/yexing_cts/article/details ...