一、HTTP协议

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

1、HTTP协议工作原理

客户机与服务器建立连接后,浏览器可以向web服务器发送请求并显示收到的网页,当用户在浏览器地址栏中输入一个URL或点击一个超连接时,浏览器就向服务器发出了HTTP请求,请求方式的格式为:统一资源标识符、协议版本号,后边是MIME(Multipurpose Internet Mail Extensions)信息包括请求修饰符、客户机信息和可能的内容。该请求被送往由URL指定的WEB服务器,WEB服务器接收到请求后,进行相应反映,其格式为:一个状态行包括信息的协议版本号、一个成功或错误的代码,后边服务器信息、实体信息和可能的内容。即以HTTP规定的格式送回所要求的文件或其他相关信息,再由用户计算机上的浏览器负责解释和显示。

2、HTTP协议的方法

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

3、HTTP状态码

类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务端错误状态码) 服务器处理请求出错

常见的HTTP状态码

200 OK
204 No Content
   一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用.
206 Partial Content
   该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求.响应报文中包含由Content-Range指定范围的实体内容.
 301 Moved Permanently
   永久性重定向.请求资源的URI已变更.
302 Found
   临时性重定向.
303 SEE OTHER
   该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源
304 Not Modified
   该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但为满足条件的情况.
307 Temporary Redirect
   临时重定向,类似302
400 Bad Request
   该状态码表示请求报文中存在语法错误
401 Unauthorized
   需要认证/认证失败
403 Forbidden
   未被授权
404 Not Found
500 Internal Server Error
503 Service Unavailable
   该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求.

二、HTTP的缺点

1、明文传输

通信使用明文可能会被窃听

1.1、TCP/IP 是可能被窃听的网络

互联网上流动的数据可能被恶意窥视, 被抓包(Packet Capture)或嗅探器(Sniffer)工具收集到数据包并解析,eg: Wireshark, 可以获取HTTP协议的请求和响应的内容,并对其进行解析

1.2、加密处理防止被窃听

通信的加密
HTTP协议中没有加密机制,可以通过和SSL或TLS的组合使用,加密HTTP的通信内容.

 HTTPS -> HTTP + SSL ->HTTP Secure / HTTP over SSL

内容的加密
对报文主体进行机密处理,前提是要求客户端和服务端同时具备加密和解密机制.

2、不安全认证

不验证通信方的身份,因此有可能遭遇伪装

  • 任何人都可发起请求
  • 查明对手的证书
    SSL不仅提供加密处理,而且使用了证书以确定通信方的身份.

3、无法判断报文完整性

无法证明报文的完整性,所以有可能已遭篡改

接收到的内容可能有误
中间人攻击(Man-in-the-Middle attack,MITM): 请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击.
如何防止篡改
常用的是 MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法.
提供下载服务的网站,比如Apache相关的软件下载,会提供以PGP(Pretty Good Privacy,完美隐私)创建的签名及MD5算法生成的散列值.

三、HTTP首部注入攻击

HTTP首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任何响应首部或主体的一种攻击.属于被动攻击模式。

向首部主体内添加内容的攻击称为HTTP响应截断攻击(HTTPResponse Splitting Attack)

如下所示,Web应用有时会把从外部接收到的数值,赋给响应首部字段Location和Set-Cookie

Location: http://www.example.com/a.cgi?q=12345
Set-Cookie: UID=12345

HTTP首部注入攻击有可能造成以下影响:

  • 设置任何Cookie信息
  • 重定向至任何URL
  • 显示任意的主体(HTTP响应截断攻击, HTTP Response Splitting Attack)

1、设置任何Cookie信息

下面我们以选定某个类别后即可跳转至各类别对应页面的功能为例,讲解HTTP首部注入攻击。该功能为每个类别都设定了一个类别ID值,一旦选定某类别,就会将该ID值反映在响应内的Location首部字段内,形如

Location: http://example.com/?cat=101

令浏览器发生重定向跳转

在这里插入图片描述

攻击者以下面的内容替代之前的类别ID后发送请求

101%0D%0ASet-Cookie:+SID=123456789

其中,%0D%0A代表HTTP报文中的换行符,紧接着的是可强制将攻击者网站的会话ID设置成SID=123456789的Set-Cookie首部字段。

发送该请求之后,假设结果返回以下响应

Location:http://example.com/?cat=101(%0D%0A:换行符)
Set-Cookie:SID=123456789

此刻,首部字段Set-Cookie已生效,因此攻击者可指定修改任意的Cookie信息。通过和会话固定攻击(攻击者可使用指定的会话ID)攻击组合,攻击者可伪装成用户

攻击者输入的%0D%0A,原本应该属于首部字段Location的查询值部分,但经过解析后,%0D%0A变成了换行符,结果插入了新的首部字段

这样一来,攻击者可在响应中插入任意的首部字段

2、重定向至任何URL

该功能就是向URL指定参数后,使本来的URL发生重定向跳转

http://example.com/?redirect=http://www.tricorder.jp

攻击者把重定向指定的参数改写成已设好陷阱的Web网站对应的连接,如下所示

http://example.com/?redirect=http://hackr.jp

用户看到URL后原以为访问example.com,不料实际上被诱导至hackr.jp这个指定的重定向目标

可信度高的Web网站如果开放重定向功能,则很有可能被攻击者选中并用来作为钓鱼攻击的跳板

3、HTTP响应截断攻击

HTTP响应截断攻击是用在HTTP首部注入的一种攻击。攻击顺序相同,但是要将两个%0D%0A%0D%0A并排插入字符串后发送。利用这两个连续的换行就可作出HTTP首部与主体分隔所需的空行了,这样就能显示伪造的主体,达到攻击目的。这样的攻击叫做HTTP响应截断攻击

%0D%0A%0D%0A<HTML><HEAD><TITLE>之后,想要显示的网页内容<!--

在可能进行HTTP首部注入的环节,通过发送上面的字符串,返回结果得到以下这种响应

Set-Cookie: UID=(%0D%0A :换行符)
(%0D%0A :换行符)
<HTML><HEAD><TITLE>之后,想要显示的网页内容(原来页面对应的首部字段和主体部分全视为注释)

利用这个攻击,已触发陷阱的用户浏览器会显示伪造的Web页面,再让用户输入自己的个人信息等,可达到和跨站脚本攻击相同的效果

另外,滥用HTTP/1.1中汇集多响应返回功能,会导致缓存服务器对任意内容进行缓存操作。这种攻击称为缓存污染。使用该缓存服务器的用户,在浏览遭受攻击的网站时,会不断地浏览被替换掉的Web网页

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐