《即时消息技术剖析与实战》学习笔记6——IM系统如何保证消息的安全性
在消息产生、流转的各个环节中,需要保证消息传输安全性、消息存储安全性、消息内容安全性。
一、消息传输安全性
消息传输的重要防范点有两个,一是访问入口安全,二是传输链路安全。
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系统如何保证消息的安全性的更多相关文章
- 《即时消息技术剖析与实战》学习笔记4——IM系统如何保证消息的可靠性
IM 系统中,保证消息的可靠投递主要体现在两方面,一是消息的不丢失,二是消息的不重复. 一.消息不丢失 消息丢失的原因 首先看一下发送消息的流程,如下图所示: 消息.可以采取"时间戳比对&q ...
- 《即时消息技术剖析与实战》学习笔记5——IM系统如何保证消息的一致性
一.什么是消息一致性 消息一致性指的是消息的时序一致性,即消息收发的一致性.如果不能保证时序一致性,就会造成聊天语义不连贯,引起误会. 对于点对点的聊天场景,时序一致性保证接收方的接收顺序和发送方的发 ...
- 《即时消息技术剖析与实战》学习笔记3——IM系统如何保证消息的实时性
IM 技术经历过几次迭代升级,如图所示: 从简单.低效的短轮询逐步升级到相对效率可控的长轮询: 全双工的 Websocket 彻底解决了服务端的推送问题: 基于 TCP 长连接衍生的 IM 协议,能够 ...
- 《即时消息技术剖析与实战》学习笔记1——IM系统的架构
一.IM的应用场景 聊天.直播.在线客服.物联网等所有需要实时互动.高实时性的场景,都需要应用到 IM 技术.
- 《即时消息技术剖析与实战》学习笔记12——IM系统如何提升图片、音视频消息发送、浏览的体验
IM系统如何提升用户发送.浏览图片和音视频消息的体验呢?一是保证图片.音视频消息发送得又快又稳,二是保证用户浏览播放图片.音视频消息时流畅不卡顿. 一.提升用户发送图片.音视频的体验 1. 多上传接入 ...
- 《即时消息技术剖析与实战》学习笔记11——IM系统如何保证服务高可用:流量控制和熔断机制
IM 系统的不可用主要有以下两个原因: 一是无法预测突发流量,即使进行了服务拆分.自动扩容,但流量增长过快时,服务已经不可用了: 二是业务中依赖的这些接口.资源不可用或变慢时,比如发消息可能需要依赖& ...
- 《即时消息技术剖析与实战》学习笔记7——IM系统的消息未读
一.什么是消息未读 消息未读包括会话未读和总未读.前者指的是当前用户和某一聊天方的未读消息数,后者指的是当前用户的所有未读消息数,也就是所有会话未读的和.比如用户A收到用户B的2条消息,还收到用户C的 ...
- 《即时消息技术剖析与实战》学习笔记8——IM系统如何保证长连接的可用性:心跳机制
假设有以下突发意外情况: 用户进入信号不好的地方,手机没有网络信号了 上网的路由器突然掉线了 这个时候,比如微信发消息,消息就会转圈圈,甚至变成红色叹号-- 上面情况都会导致"长连接&quo ...
- 《即时消息技术剖析与实战》学习笔记9——IM系统如何支持消息的多终端漫游
一.什么是多终端漫游 多终端漫游是指:用户在任意一个设备登录后,都能获取到历史的聊天记录.如:QQ 默认漫游 7 天的聊天记录,开通 VIP 会员可漫游 30 天,开通 SVIP 会员可漫游 2 年. ...
随机推荐
- 21个React开发神器
摘要: React开发神器. 原文:22 Miraculous Tools for React Developers in 2019 译者:前端小智 下列工具中的重要性与排序无关. 1.Webpack ...
- 阿里云部署SSL证书
查找中间证书 为了确保兼容到所有浏览器,我们必须在阿里云上部署中间证书,如果不部署证书,虽然安装过程可以完全也不会报错,但可能导致Android系统,Chrome 和 Firefox等浏览器无法识别. ...
- 在表单中使用ajax,成功后跳转指定页面 出现Provisional headers are shown 解决办法
问题回顾: 在表单里面,有个button按钮,在点击这个button的时候,我发送了ajax请求,然后请求成功的话,就使用window.location.href = xxx,跳转到其他页面 但是,一 ...
- Microsoft Surface 2019新品发布会汇总
Microsoft Surface 2019 新品发布会汇总 10月2日晚,微软举行了Microsoft Surface 2019秋季新品发布会,本次发布会涉及如下设备内容等: SurfaceLapt ...
- Skyshop.Detail Maps
Secondary Maps(Detail Maps) & Detail Mask 增加模型细节,而不需要使用单张的超大贴图. 应用:增加皮肤细节,比如毛孔:砖墙添加细小的裂缝和青苔:大型金属 ...
- 201871010136-赵艳强《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- Python内容
1.Python介绍.计算机硬件.网络.变量.数据类型:列表+元组+字典+布尔值+字符串+数字+集合.格式化输出.if判断.for循环.while循环. 2.三元运算.字符编码.文件处理:r/rb(读 ...
- LeetCode 654. Maximum Binary Tree最大二叉树 (C++)
题目: Given an integer array with no duplicates. A maximum tree building on this array is defined as f ...
- 史上最全NOIP初赛知识点
CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...
- Excel 日期和时间函数
1.TODAY和NOW函数 today和now函数 日期可以进行加减运算 2.提取日期和时间的函数 公式=Year() 公式=month() 公式=day() 公式=hour() 公式=minute( ...