关于HTTP 你不能不知道的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于HTTP 你不能不知道的相关的知识,希望对你有一定的参考价值。

参考技术A HTTP:Hyper Text Transfer Protocol(超文本传输协议),是用于服务器向浏览器传输超文本的协议,其建立在TCP/IP之上,由于其简单、快速的特点,得到广泛应用。小采风同学,自作主张选取部分方面,粗略的聊一聊我们不能不知道的常识

    HTTP协议定义web客户端(通常为浏览器,以下统称为浏览器)向服务器发送请求报文,服务器读取请求报文内容,定位URL中相应资源,以响应报文的方式传送给浏览器,浏览器解析响应报文中的实体数据,呈现出静态和动态页面。其工作原理如下所示:

1)浏览器建立连接

浏览器根据DNS返回的域名的IP地址和服务器端口号(默认为80),建立基于TCP的套接字连接,具体参考 TCP之连接的建立与终止

2)发送HTTP请求

以请求报文的形式,包括请求行、请求头部、空行和实体数据部分

3)服务器解析请求并发送HTTP响应

服务器解析请求报文,定位请求资源位置,以响应报文的方式返回,包括响应行、响应头部、空行和实体数据,具体分析见下文

4)浏览器解析实体数据

将静态页面和动态页面显示在浏览器窗口

    在HTTP/1.0版本中,其连接建立一次,断开一次。为解决此问题,HTTP/1.1中提出持久化连接方式,只要任意一端没有提出断开连接,则保持TCP连接状态。在持久连接基础上,管线化发送成为可能。管线化方式,无需等待上次请求响应,直接发送下一次请求,如图一所示:

    双方在传送数据时,在不同的业务场景下,可选择不同方式来提高效率。常见的有压缩传输、分割传输的分块传输、多部分对象结合传输和部分内容的范围请求传输。

    需要注意的是,HTTP只被用来发布客户端和服务端的应用层命令。当进行数据传输时,除了在数据流的开始和结束部分,是看不到应用层的控制信息的,如图2所示:

HTTP报文分为请求报文和响应报文,其组成包括请求首部(响应首部)、空白行和实体数据组成。空白行,即使没有数据也不能省略。而请求首部由请求行(响应首部由响应行)、请求头部(响应头部)、通用首部、实体首部和其他项组成,如图3所示:

上图中请求行和状态行,是需要特别注意的。而首部的类型和种类之多,需要参考《HTTP权威指南》查阅学习。

1)请求行:方法名、路径名和版本号组成

HTTP/1.1中有八种方法,下面一一介绍方法的使用情况:

GET:用来请求访问已被标示的资源,资源是文本,直接返回;资源是程序,返回执行的结果

POST : 用来传输实体主体,与GET类似,但是主要目的并不是为获取响应的主体内容

PUT : 用来传输文件,因自身不具备验证机制,存在安全问题,通常不使用

DELETE : 用来删除文件,与PUT方法相反,同样因自身不具备验证机制,通常不使用

HEADER: 与GET方法相同,只是不返回报文实体数据,主要用于确认URL的有效性及资源的 日期时间等

OPTIONS: 用来查询针对请求URI指定的资源支持的方法

TRACE: 用来确认连接过程中发生的一系列操作,因容易产生跨站追踪攻击,通常不使用

CONNECT:基于SSL和TLS实现通信内容加密传输,主要在HTTPS中使用,下文介绍

而上面的八种方法中,通常是GET和POST方法,介绍一下二者的不同,如图4和图5所示:

a)GET参数包含在URL中,以?与路径区分,多个参数用&连接;POST参数包含在请求报文的实体数据中

b)URL的数据有长度限制,所以GET方式有限制;通常POST方式没有长度限制

c)GET的数据在URL中,使用明文传送,容易被获取;POST数据也是基于明文传送,安全性比GET好一些

2)响应行:版本号、状态码

状态码由表示状态的数字和原因短语组成,状态码分类如下图6:

状态码种类繁多,有60多种,具体参考 状态码查询 ,常见的有12种,介绍如下:

200 OK : 表示浏览器发来的请求在服务器端被正常处理了

204 No Content : 表示浏览器发来的请求被服务器正常处理了,但是返回的响应报文中不包含实体数据,及浏览器的页面不更新

206 Partial Content : 服务器仅返回指定范文中的数据,即上文中的部分内容范围传输方式

301 Moved Peramanently : 永久性重定向,即该请求资源被重新分配了URI

302 Found : 暂时性重定向,即该请求的资源被被分配新的URI,希望本次使用新的URI

304 Not Found : 浏览器发送带有附带条件的请求,但因发生条件不满足的情况,服务器端不返回

400 Bad Request : 表示请求报文中存在语法错误

401 Unauthorized : 第一次请求,表示需要通过HTTP认证;若经过第一次请求,仍然出现表示认证失败

403 Forbidden : 表示请求的资源被服务器拒绝了

404 Not Found : 表示服务器无法找到相应的资源,也可以表示服务端拒绝请求且不想说明原因

500 Internal Server Error : 表示服务器在执行请求时发生错误

503 Service Unavailable : 表示服务器暂时处于超负载或正在进行停机维护

事务具有两面性,HTTP的简单也带来了相应的问题,其是一种无状态的不安全的协议,针对这两种劣势,小采风和大家一起继续往下看:

HTTP是一种无状态协议,不能管理之前的请求和响应间的状态。为解决此问题,引入Cookie机制,通过在请求和响应报文中增加Cookie信息来管理状态,cookie字段就是上文报文结构中的其他项里,如下图7所示:

Session是服务器为浏览器请求建立的程序。服务器根据请求报文中sid来标示该访问的Session,如果没有,则重新生成,并在响应报文中重新添加sid,cookie与session的区别如下:

a)cookie在浏览器端,session在服务器端

b)cookie不安全,容易被利用进行cookie欺骗

c)session可以设置超时时间,一旦超时,重新建立

关于其具体的工作机制,参考 cookie和session的区别详解  

HTTP存在的不足有:

a)浏览器和服务器互相不认证,可能遭遇伪装

b)通信的传输数据使用明文传输,容易被截获修改

c)数据的完整性无法保证,中途被人篡改也不知道

    HTTPS是如何弥补HTTP在安全方面的不足呢?HTTPS不是应用层新的协议,而是通过SSL和TSL代替HTTP的通信协议接口。通常,HTTP直接与TCP进行通信,而HTTPS中,HTTP先与SSL进行通信,后与TCP进行通信。SSL是目前应用最广泛的网络安全技术。

    在介绍SSL解决HTTP安全性问题之前,我们先来了解一下加密方法。

    通常,加密算法是大家都知道的,但是加密和解密的密钥是不知道的。一旦加密和解密密钥泄露,存在安全性问题。共享密钥加密方式,也称为对称密钥加密方式,浏览器和服务器加密和解密使用相同的密钥。可是,密钥该如何传输呢?传输中间被攻击,则安全性没有保证。

    人类似乎天生就是来解决问题的。公开密钥加密方式,也称为非对称加密方式。服务器,拥有一对存在一定关系的公开密钥和私有密钥。服务器将公开密钥传送给浏览器,浏览器使用收到的公开密钥进行加密,即使中间收到攻击,也因为没有解密密钥,即私有密钥,无法解密。服务器收到加密数据后,使用私有密钥成功解密。

    公开密钥加密方式,处理速度相比于共享密钥加密方式比较慢。

    HTTPS中,SSL充分结合两者优势,利用公开密钥加密方式传输后面使用的共享密钥加密解密的密钥,然后浏览器和服务器使用共享密钥进行加密解密处理,如图8所示:

        HTTPS相比于HTTP,处理速度要慢2到200倍。主要速度影响在,

a)通信处理:HTTP与TCP之间加上SSL之后,通信量会增加很多

b)加密解密:消耗服务器和浏览器端硬件资源,造成较大负载

    所以,并不是所有的均使用HTTPS,敏感信息使用HTTPS,非敏感信息使用HTTP。

近日来,小采风沉迷在协议的迷乱中不能自拔,未来,会近一步推出协议类系列文章,欢迎各位看官关注哦!

关于数据库加密,你不能不知道的秘密

 

本文接前文,继续通过几个相关问题的阐述,解开数据库加密的神秘面纱。

 

1. 如何弥补数据库加密系统对数据库保护的不足?

通过配套使用数据库审计、数据库防火墙、数据库脱敏等系统,设置安全规则,限制敏感数据被访问的记录数量、被访问的语句类型等多个方面,防止SQL注入、防止拖库、防止后门程序等攻击形式,从而形成对数据库的全方位保护,弥补数据库加密对数据库保护的不足。

 

技术图片

 

2. 数据库加密的关键技术有哪些?

1)透明加密技术:为使得数据加密后对外部访问完全透明,需要支持所有的访问方式和数据库特性,这是数据库加密的基本要求。这就需要加密后表名、字段名保持不变;支持查询、插入、更新、删除等操作;以及支持SQL语句访问、存储过程、触发器、用户自定义函数、主键、外键、各种约束等特性。

2)密文索引:字段被加密后,数据原来的字段属性和大小关系都会被修改,原来的索引也不再有效。比如对数值型字段“工资”进行加密,加密后字段类型可能变为字符型或者RAW类型,且密文不再保持加密前内容的大小关系。如果需要检索指定的工资值或者范围值,一种方法就是将所有加密内容解密后再进行检索,但是这势必会导致性能的极大降低。密文索引就是对被加密字段建立索引,使得字段能在被加密状态下被高速的执行等值、范围甚至是模糊检索,以避免加密导致的性能大幅降低。

3)密钥管理:数据的加密和解密都需要使用密钥,密钥需要被妥善的管理才能保障数据的安全。这就好比无论多么坚固的锁,如果钥匙没有被妥善保存,都将是形同虚设。密钥的管理涉及到密钥的产生、交换、轮换、失效、备份等环节。在数据库加密中,由于涉及到多个字段的加密,所以一般需要设计多级密钥。需要对所有的密钥进行安全的管理,防止密钥被泄漏或者破坏。

 

3. 密文索引技术有哪些?

密文索引技术可以粗略的划分为两代:

第一代密文索引:基本解决性能和透明问题。基本思想是利用数据库的索引机制,建立能够快速查找的B树索引。并且对B树所有的节点进行加密,防止索引泄密。该代技术由北京理工大学戴林教授发明。

第二代密文索引:相比第一代技术,具有更高的性能,并且支持通配符模糊检索。基本思想同样是利用数据库的机制,建立能够快速查找的索引。并且对索引和加密字段的关联关系进行加密,防止索引泄密。该代技术由中安威士发明。

 

4. 数据库加密系统的关键指标有哪些?

· 是否完全透明,支持所有的数据访问和操作,以及所有的数据库特性;

· 能否对密文实现高速等值和范围查询;

 

 

· 能否对字符型加密字段实现高速模糊查询,也就是LIKE查询;

· 能否对数据库用户进行增强的访问控制;

· 密文索引自身是否安全性,索引不应成为新的泄密点;

 

· 密钥是否实现了安全管理,密钥的组成、保存、生命期等符合相关安全规则和规定。

 

5.国内主要数据库加密厂家有哪些?

包含中安威士在内,目前国内的数据库加密源厂家只有很少几家。为防止广告嫌疑,本文不对各家产品的来源及安全性、性能等方面进行评论。欢迎第三方评测机构进行评测。

 

6. 为什么数据库加密产品只支持Oracle?

目前国内的数据库加密产品都基于第一代索引技术研制,采用库内扩展的技术路线。其密文索引的实现依赖于数据库开放的自定义索引接口。所谓自定义索引就是数据库允许用户开发索引插件,对数据库自身无法识别的数据类型,例如图片、音乐等进行索引。我们可以将加密后的字段看成数据库不能识别的数据类型,从而定义出密文索引。目前主流数据库中,仅有Oracle数据库提供这种接口。而对于不提供这种接口的数据库来说,虽然仍可以实现透明加密,但是不能实现对加密字段的高速索引,从而性能很低,难以成为通用产品。所以市场上只有针对Oracle数据库的数据库加密产品。

 

7. 能否实现通用的数据库加密?

由于上述原因,库内扩展的方式不大可能实现通用的数据库加密产品。实现通用的数据库加密产品可能的方式有:

1)全盘和文件加密。也即对存储磁盘或者数据库文件进行加密,但是这种加密方式的安全性较低;

2)数据库加密网关或加密驱动。类似于CryptDB的系统,在数据库前部署网关,实现数据的加密。中安威士发明的新专利技术已经克服了CryptDB的缺陷,解决了对所有访问语句的支持,实现了密文的等值、范围、以及模糊索引,并将继续实现对存储过程,触发器等的支持。

3)应用加密网关。虽然这种加密方式并不能准确的被称作数据库加密,但是可以做到数据库无关。

 

8. 如何选择数据库加密产品?

选择数据库加密产品,需要考查如下因素:

a) 是否对应用完全透明,尤其是:

· 对主键、外键的透明加密;

· 加密字段的值约束、唯一性约束的透明支持;

· 对存储过程,用户自定义函数、触发器等的透明支持。

b) 性能方面,加密是否导致数据库性能的显著降低。需要重点关注以下性能:

· 初始批量加密的性能,也即将已有表中数据批量进行加密的性能;

· 等值检索和范围检索的性能,也就是从大量加密信息中检索到满足等值和范围查询条件记录的性能;

· 模糊检索的性能,也就是使用LIKE进行关键字、通配符检索的性能;

· 插入(INSERT)、删除(DELETE)、更新(UPDATE)记录的性能。

c) 安全性方面,加密系统是否有新的安全漏洞:

· 索引是否安全:密文索引加密强度是否足够,或者索引是否直接使用了明文;

· 能否限制DBA等高权限用户对加密字段的访问;

· 是否部分明文暴露:是否将敏感数据解密后存储于临时表,这些明文信息将直接暴露给攻击者。

d) 其他方面:

· 产品是否真正国产;

· 厂家是否真正掌握核心技术;

· 厂家是否具有外资背景,具有外资背景的厂家的产品,应用于敏感部门具有泄密和法规的风险;

· 厂家是否已有或者存在潜在的知识产权纠纷。

 

9.数据库加密未来的发展趋势会是怎样的?

目前国内市场主流的数据库加密方式是库内扩展加密,仅能比较完美的支持Oracle数据库。但是随着云计算和大数据的发展,未来的数据库加密将朝着如下趋势发展:

a) 面向云计算的通用网关式数据库加密产品将会在将来一到两年内出现,并将首先支持云计算中的主力数据库MYSQL,然后再支持其他关系型数据库;

b) 逐渐支持NoSQL数据库的加密,以加固大数据应用;

c) 数据库加密将与数据库审计、数据库防火墙、数据库脱敏等形成ALL-IN-ONE的数据库安全平台;

d) 数据库加密产品的市场接受度将会越来越高,市场容量将会爆发;

e) 在云计算中,包括公有云、私有云以及混合云,包括数据库加密在内的数据库安全产品将成为标配。

以上是关于关于HTTP 你不能不知道的的主要内容,如果未能解决你的问题,请参考以下文章

你知道 http 响应头中的 ETag 是如何生成的吗

关于数据库加密,你不能不知道的秘密

关于线程池,这些“根儿上”的东西你不能不知道!

关于防御性编程,你应该知道的事

关于Requests代理,你必须知道的

关于 HTTP2 和 HTTPS,这些你必须要知道