HTTP协议及其安全隐患

HTTP协议

  在TCP/IP协议栈中,应用层包含很多的协议,其中应用最为广泛的协议被称之为HTTP协议。在日常生活中使用HTTP协议十分广泛,比如在访问网站的时候,使用的协议就是HTTP协议。
在这里插入图片描述

HTTP协议
  HTTP是一个基于请求与响应模式的、无状态的应用层协议。

  • 请求响应
      客户端要向web服务器发送一个请求以后,等待服务器回送http响应消息。
  • 无状态
      http协议整个过程当中的各种信息不会被服务器所记录下来。

  常基于TCP的连接方式 ,即http是将数据打包成TCP数据包来进行传送的,绝大多数Web应用,都是构建在HTTP协议之上,即目前使用浏览器访问web网站都是以http协议为标准的。

HTTP协议中的URL
   HTTP URL是一种特殊类型的URI,包含了用于查找某个资源的标识信息。
一般URL的格式如下:

   http://host[“:”port][path]:

  • http表示要通过HTTP协议来定位网 络资源;
  • host表示主机域名或者IP地址;
  • port指定端口号,为空 则使用缺省端口 80;
  • path指定请求资源的URI

例如
  http://news.sina.com.cn/c/z/xjpfyzsg2014/
  就是一个具体的URL

http的请求消息格式
  HTTP请求由三部分组成:请求行、消息报头、请求正文 。

  • 请求行:指明要访问什么资源
  • 消息报头:指明http协议中各个字段的含义。HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。
  • 请求正文:指明请求消息所包含的具体内容。

Http请求行
  请求行以一个方法符号开头,以空格分开,后面是请求的URI和 协议的版本,格式如下:
  Method Request-URI HTTP-Version CRLF

  • Method:表示请求方法;
  • Request-URI:是一个统一资源标识 符;
  • HTTP-Version:表示请求的HTTP协议版本;
  • CRLF:表示回车和换行

  例如我们进入百度的首页,F12打开浏览器调试。找到Network,点击并刷新网页,就能看到浏览器请求的内容。
在这里插入图片描述

GET / HTTP/1.1  // 请求行
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9  //请求头
// 请求正文
......

HTTP协议的方法

  • GET :请求获取Request-URI所标识的资源
  • POST :在Request-URI所标识的资源后附 加新的数据
  • HEAD:请求获取由Request-URI所标识的资源的响应消息报头
  • PUT: 请求服务器存储一个资源,并用Request-URI作为其标识
  • DELETE:请求服务器删除Request-URI所标识的资源
  • TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
  • CONNECT:保留将来使用
  • OPTIONS:请求查询服务器的性能或查询与资源相关的选项等

HTTP协议的响应消息格式
  包括:初始状态行、首部行,实体主体 。

扫描二维码关注公众号,回复: 10193788 查看本文章
HTTP/1.1 200 OK   // 状态行
Bdpagetype: 2
Bdqid: 0xf63dd9120001138a
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Wed, 18 Mar 2020 05:02:14 GMT
Expires: Wed, 18 Mar 2020 05:02:14 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=172; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=30968_1426_21087_30903_30998_30824_31086; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1584507734025483316217743576778242331530
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked   // 以上都是首部行等
// 实体主体
............

HTTP协议的安全隐患

(1) 钓鱼攻击
  攻击者通过某种方式伪造了某个网站的信息。例如攻击者会设计一个网站,网站的内容与被攻击目标完全一致,最后将其访问的方式在网络上散布,当客户端点击相应的连接,就有可能访问到仿冒的网站,这个网站对于客户来说十分熟悉,就有可能上当受骗。受骗的主要原因就是不知道仿冒的网站是真还是假,因为在http协议中没有严格的认证机制,通过此方式,攻击者就有可能获取用户的敏感信息。

在这里插入图片描述
(2) 跨站脚本攻击

  • 脚本:一个小程序,能够被浏览器解析执行。
  • 脚本攻击(script attack):攻击者将具有攻击性的脚本发送给 浏览器解释执行,从而获取用户数据或破坏系统 。

  为了保护用户数据的安全,浏览器一般不允许脚本程序访问跨会话(session)数据。
  HTTP协议一般使用TCP来传输数据,每当用户与web浏览器建立通信时都会建立一个连接,这个连接我们称作会话,不同的连接或会话之间的数据是受到浏览器保护的,脚本程序是不能够跨越会话或者浏览器去访问其他网页上的数据。

<SCRIPT>Alert(Document.Cookie)</SCRIPT> 

  以上是一个简单的脚本程序,其中使用了Alert函数来显示文档中的cookie信息,cookie即包含用户敏感信息的本地文件,比如说访问一个购物网站,web服务器会将用户的账户和密码等信息存放到本地,以便以下一次登录网站的时候不再输入账户和密码。

脚本攻击过程
  攻击者向攻击目标发送一段脚本程序,攻击目标解析执行之后读取本地cookie并将此信息发送给攻击者。
在这里插入图片描述
  脚本程序不能跨越会话或者浏览器去访问其他网页上的数据。

跨站脚本攻击过程

  在这样的一个过程中,为了获取被攻击者的数据,攻击者是不能直接将脚本程序发送给被攻击目标的。
  如何实现跨站呢?
  首先攻击者将可能存在攻击性代码的脚本程序发送到服务器上,这些脚本就会被服务器存放在本地,被攻击目标访问服务器的时候,则可能访问到含有这些脚本程序的网页,这些网页就可能被被攻击者下载到本地并解析执行。在执行的过程中就有可能获取到相应的信息并发送给攻击者。

  攻击者向web服务器上传脚本程序的页面,即可能生成含有脚本程序的途径有:

  • 论坛
      允许用户提交信息
  • 评论
      产品评论、售后评价等允许提交信息
  • 即时通信
      允许用户发送消息
  • 社交网络应用
      允许用户收发消息、讨论和评价

发生跨站脚本攻击的条件

  • 一个允许用户输入信息的web应用 ,允许用户在其中提供相应的内容
  • 用户输入数据可用于动态生成页面 ,这些信息能够被服务器存储,攻击者进行访问时,能够动态生成网页。
  • 用户的输入未作合法性验证 攻击者所提供的非法程序没有被检测出来

跨站脚本攻击分类

  • 持久性跨站(persistent XSS or stored XSS)
      攻击数据存放于服务器。当用户访问正常网页时,动态生成网页,服务端会将恶意的指令 夹杂在正常网页中传回给用户。

  • 非持久性跨站(non-persistent XSS or reflected XSS)
      恶意脚本程序脚本主要是在受害者请求HTTP后得到一个即刻的响应时执行 如(服务端根据用户提交的恶意数据生成页面)。

  • 文档对象模型跨站(DOM-based XSS)
      如果客户端脚本(例如JavaScript)动态生成 HTML的时候,没有严格检查 和过滤参数,则可以导致 DOM (Document Object Model)跨站攻击。

  用户通过浏览器访问网页时,返回给用户的是一个文档对象模型,在所有的HTML对象中,document是最主要的文档对象,它还 包括很多字对象(如location, URL ,referrer和body等)

document.location 
document.URL 
document.URLUnencoded 
document.referrer 
document.write() 
document.writeln() 
document.boby.innerHtml 

  文档对象包含很多的属性和方法,通过对这些方法进行调用或者对属性进行赋值,就能实现跨站脚本攻击,例:

http://www.abc.com/welcome.html 
<HTML> <TITLE>Welcome!</TITLE> Hi <SCRIPT> var 
pos=document.URL.indexOf("name=")+5; 
document.write(document.URL.substring(pos,document.URL.length)); </SCRIPT> 
<BR> Welcome to our system … </HTML> 

  当用户访问这个网页的时候,其要求用户输入姓名,这个网页会根据用户输入的姓名来动态显示相应的内容。正常情况下会在浏览器中显示Welcome to our system
但是我们嵌入这样一段代码:
http://www.abc.com/welcome.html?name= < script>alert(document.cookie)</ script>
  在这样的情况下,攻击者就将用户名替换成了一段脚本代码,就实现了对用户的跨站脚本攻击。

发布了74 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/fu_yunjian/article/details/104941040