浏览器与服务端之间的通信
1.HTTP
超文本传送协议(HyperText Transfer Protocol),是一种无状态协议,应用于计算机网络通信的一种规则。一般我们通过浏览器从相应服务器获取相关的网页文件,此过程只进行一次连接,即"发送请求"—"接收响应",不建立持久连接。
过程:建立连接—>浏览器发送http请求—>服务器响应,并发送相关文件—>服务器连接关闭,浏览器解析相关文件,渲染页面
使用端口:80
信息安全性:不安全
HTTP响应码:1xx—提示信息
2xx—请求成功
200:成功请求的标准状态码
3xx—重定向
301:永久重定向—资源被永久转移到其他URL,会自动连接
302:重定向—用户所请求的资源被发现位于其他URL中,但用户继续使用当前URL
304:文件未变化—已经执行请求,但资源未变化
4xx—浏览器错误
400:错误请求—服务器无法理解的语句错误
404:无法找到所请求界面
5xx—服务器错误
500:内部服务器错误—服务器遇到意外状况导致请求失败
503:服务器暂时不可用或过载导致请求失败
2.HTTPS
超文本传输安全协议(Hypertext Transfer Protocol Secure),超文本传输协议(http)与SSL、TLS的组合,以提供加密通讯及网络服务器身份鉴定。
服务器与浏览器通过一次握手进行信息传输:
浏览器将自身支持的加密法发送至服务端—>服务端从中选择一组加密算法,hash算法及包含身份信息(网站地址,加密公匙,证书颁发机构等)的证书返回浏览器—>浏览器验证证书合法性(已知CA列表),若不合法会有提示信息,由用户决定是否接受—>接受后生成随机密码并用公匙加密,用约定的hash算法计算握手信息并加密—>发送至服务器,服务器解析并验证信息,同时发送加密的握手信息至浏览器—>浏览器解析验证,若hash一致则握手结束,可进行加密信息传递。
简化:证书验证—>密匙交换(密匙约定)—>验证密匙—>握手(识别通信双方,确定信息交换算法)
使用端口:43
信息安全性:相对安全
3.HeartBleed(OpenSSL漏洞)
SSL(Secure Socket Layer):web的安全传输协议,采用公开密钥技术,保证两个应用间通信的保密性和可靠性,TCP安全层。
OpenSSL:开源的的SSL包,编程语言为C语言,实现基本的传输层数据加密功能。
由于OpenSSL的小错误而导致的漏洞:
先看看漏洞出现点,SSL heartbeat:浏览器与服务器之间建立握手过程,有2个来回(浏览器->服务器->浏览器【判断是否接受】->服务器->浏览器),这个过程难免会有延时,为防止连接在中间断掉而占用服务器资源,于是在此过程,客户端会隔一段时间就发一个 “心跳”包,以告诉服务器,浏览器还未断线,而服务器会返回相应心跳,以此维持连接状态,这就是心跳监测。
漏洞出现的根因:缺乏心跳包边界检查,即未对心跳包长度与实际载荷长度的匹配性进行校验,因此当在心跳包中人为的加入类似超量信息索取的请求时,服务器无法提供足量的心跳包反馈数据,就会将心跳包后的内存区块一同发送给对端,从而导致信息泄漏,而该心跳包成为畸形的心跳包。每次泄漏的内容都是随机的,但难免会包含敏感信息,而对用户造成损失~
4.该怎么做
对于用户:暂停使用OpenSSL加密的网站,等受影响的网站升级软件,修复漏洞后修改密码。
对于码农:规范代码编写,注意代码整洁,保持思维清晰,合理命名以剔除BUG啦~