• HTTP协议分析及攻防方法


    HTTP协议简介

    应用层协议,无状态协议(可设定为维持TCP连接,但服务器端的资源会释放)。默认HTTP的端口号为80,HTTPS的端口号为443。

    基于HTTP协议的客户机访问包括4个过程,分别是建立TCP套接字连接、发送HTTP请求报文、接收HTTP应答报文和关闭TCP套接字连接。

    请求报文格式:请求行、请求头部和请求数据。

    应答报文格式:状态行、响应报头、响应正文

    HTTP请求方法

    HTTP/1.1协议中共定义了八种方法来表明Request-URI指定的资源的不同操作方式,方法名称是区分大小写的:

    HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。 

    GET 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。 

    GET请求报文示例:

    GET http://www.baidu.com:80/ HTTP/1.1

    Accept: */*

    Accept-Language: zh-cn

    Accept-Encoding: gzip, deflate

    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;

    Windows NT 5.1; SV1; .NET CLR 2.0.50727)

    Host: www.baidu.com

    Connection: Keep-Alive

    GET应答报文示例:

    HTTP/1.1 200 OK                                                              /* 状态行 */

    Via: 1.1 CVICSE-ST5YDEOY                                           /* 状态头信息 */

    Connection: Keep-Alive

    Proxy-Connection: Keep-Alive

    Content-length: 9803

    Expires: Fri, 02 Nov 2012 03:05:31 GMT

    后边是页面内容等                                              

    POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 

    POST请求报文示例:

    POST /sp.cgi HTTP/1.0        

    Host: www.spserver.com        

    Content-Length: <Content-Length>

    <CommandId>=<4>          

    <SequenceNumber>=<205502327125025327>

    <UserNumber>=<8613001125453>

    <SPNumber>=<168>

    <MessageContent>=<ABCD 1234>

    POST应答报文示例:

    HTTP/1.0 200 OK                                                /* 状态行 */

    Date: Tue, 13 Mar 2001 02:45:12 GMT                   /* 状态头信息 */

    Server: Apache/1.3.12 (Unix)

    Content-Type: text/html

    Connection: close

    后边是POST实体信息                                                 /* 一般为POST实际传输的信息*/

    OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。 

    PUT 向指定资源位置上传其最新内容。 

    DELETE 请求服务器删除Request-URI所标识的资源。 

    TRACE 回显服务器收到的请求,主要用于测试或诊断。 

    CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 

    HTTP协议字段

    Requests独有部分:

    Header

    解释

    示例

    Accept

    指定客户端能够接收的内容类型

    Accept: text/plain, text/html

    Accept-Charset

    浏览器可以接受的字符编码集

    Accept-Charset: iso-8859-5

    Accept-Encoding

    指定浏览器可以支持的web服务器返回内容压缩编码类型

    Accept-Encoding: compress, gzip

    Accept-Language

    浏览器可接受的语言

    Accept-Language: en,zh

    Accept-Ranges

    可以请求网页实体的一个或者多个子范围字段

    Accept-Ranges: bytes

    Authorization

    HTTP授权的授权证书,当使用密码机制时用来标识浏览器

    Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

    Cookie

    Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能

    JSESSIONID=DFB91E6D3B78AFD0270FDA90DA7062E1.isp5; CASSERVERPATH=http://192.168.2.19:8580

    Content-Length

    请求的内容长度

    Content-Length: 348

    Content-Type

    请求的与实体对应的MIME信息

    Content-Type: application/x-www-form-urlencoded

    Expect

    客户预期的响应状态

    Expect: 100-continue

    From

    发出请求的用户的Email

    From: user@email.com

    Host

    指定请求的服务器的域名和端口号

    Host: www.zcmhi.com

    If-Match

    只有请求内容与实体相匹配才有效,供PUT方法使用

    If-Match: “737060cd8c284d8af7ad3082f209582d”

    If-Modified-Since

    如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码

    If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT

    If-None-Match

    如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变

    If-None-Match: “737060cd8c284d8af7ad3082f209582d”

    If-Range

    如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag

    If-Range: “737060cd8c284d8af7ad3082f209582d”

    If-Unmodified-Since

    只在实体在指定时间之后未被修改才请求成功

    If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT

    Max-Forwards

    限制信息通过代理和网关传送的时间

    Max-Forwards: 10

    Proxy-Authorization

    连接到代理的授权证书

    Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

    Range

    只请求实体的一部分,指定范围

    Range: bytes=500-999

    Referer

    先前网页的地址,当前请求网页紧随其后,即来路

    Referer: http://www.zcmhi.com/archives/71.html

    TE

    客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息

    TE: trailers,deflate;q=0.5

    User-Agent

    User-Agent的内容包含发出请求的用户信息

    User-Agent: Mozilla/5.0 (Linux; X11)

    Responses 独有部分 

    Header

    解释

    示例

    Accept-Ranges

    表明服务器是否支持指定范围请求及哪种类型的分段请求

    Accept-Ranges: bytes

    Age

    从原始服务器到代理缓存形成的估算时间(以秒计,非负)

    Age: 12

    Allow

    对某网络资源的有效的请求行为,不允许则返回405

    Allow: GET, HEAD

    Content-Encoding

    web服务器支持的返回内容压缩编码类型。

    Content-Encoding: gzip

    Content-Language

    响应体的语言

    Content-Language: en,zh

    Content-Length

    响应体的长度

    Content-Length: 348

    Content-Location

    请求资源可替代的备用的另一地址

    Content-Location: /index.htm

    Content-MD5

    返回资源的MD5校验值

    Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

    Content-Range

    在整个返回体中本部分的字节位置

    Content-Range: bytes 21010-47021/47022

    Content-Type

    返回内容的MIME类型

    Content-Type: text/html; charset=utf-8

    ETag

    请求变量的实体标签的当前值

    ETag: “737060cd8c284d8af7ad3082f209582d”

    Expires

    响应过期的日期和时间

    Expires: Thu, 01 Dec 2010 16:00:00 GMT

    Last-Modified

    请求资源的最后修改时间

    Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT

    Location

    用来重定向接收方到非请求URL的位置来完成请求或标识新的资源

    Location: http://www.zcmhi.com/archives/94.html

    Proxy-Authenticate

    它指出认证方案和可应用到代理的该URL上的参数

    Proxy-Authenticate: Basic

    refresh

    应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)

    Refresh: 5; url=

    http://www.zcmhi.com/archives/94.html

    Retry-After

    如果实体暂时不可取,通知客户端在指定时间之后再次尝试

    Retry-After: 120

    Server

    web服务器软件名称

    Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)

    Set-Cookie

    设置Http Cookie

    Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

    Vary

    告诉下游代理是使用缓存响应还是从原始服务器请求

    Vary: *

    WWW-Authenticate

    表明客户端请求实体应该使用的授权方案

    WWW-Authenticate: Basic

     

    Requests/ Responses共有部分

    Header

    解释

    示例

    Cache-Control

    指定请求和响应遵循的缓存机制

    Cache-Control: no-cache

    Connection

    表示是否需要持久连接。(HTTP 1.1默认进行持久连接)

    Connection: close

    Date

    浏览器或者服务器消息发出的时间

    Date: Tue, 15 Nov 2010 08:12:31 GMT

    Pragma

    包括实现特定的指令,它可应用到响应链上的任何接收方

    Pragma: no-cache

    Trailer

    指出头域在分块传输编码的尾部存在

    Trailer: Max-Forwards

    Transfer-Encoding

    文件传输编码

    Transfer-Encoding:chunked

    Upgrade

    向服务器指定某种传输协议以便服务器进行转换(如果支持)

    Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

    Via

    通知中间网关或代理服务器地址,通信协议

    Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

    Warning

    警告实体可能存在的问题

    Warning: 199 Miscellaneous warning

           

    HTTP返回状态码

    1xx:请求收到,继续处理

    2xx:操作成功收到,分析、接受

    3xx:完成此请求必须进一步处理

    4xx:请求包含一个错误语法或不能完成

    5xx:服务器执行一个完全有效请求失败

    100——客户必须继续发出请求

    101——客户要求服务器根据请求转换HTTP协议版本

    200——交易成功

    201——提示知道新文件的URL

    202——接受和处理、但处理未完成

    203——返回信息不确定或不完整

    204——请求收到,但返回信息为空

    205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件

    206——服务器已经完成了部分用户的GET请求

    300——请求的资源可在多处得到

    301——删除请求数据

    302——在其他地址发现了请求数据

    303——建议客户访问其他URL或访问方式

    304——客户端已经执行了GET,但文件未变化

    305——请求的资源必须从服务器指定的地址得到

    306——前一版本HTTP中使用的代码,现行版本中不再使用

    307——申明请求的资源临时性删除

    400——错误请求,如语法错误

    401——请求授权失败

    402——保留有效ChargeTo头响应

    403——请求不允许

    404——没有发现文件、查询或URl

    405——用户在Request-Line字段定义的方法不允许

    406——根据用户发送的Accept拖,请求资源不可访问

    407——类似401,用户必须首先在代理服务器上得到授权

    408——客户端没有在用户指定的饿时间内完成请求

    409——对当前资源状态,请求不能完成

    410——服务器上不再有此资源且无进一步的参考地址

    411——服务器拒绝用户定义的Content-Length属性请求

    412——一个或多个请求头字段在当前请求中错误

    413——请求的资源大于服务器允许的大小

    414——请求的资源URL长于服务器允许的长度

    415——请求资源不支持请求项目格式

    416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求

    也不包含If-Range请求头字段

    417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下

    一级服务器不能满足请求

    500——服务器产生内部错误

    501——服务器不支持请求的函数

    502——服务器暂时不可用,有时是为了防止发生系统过载

    503——服务器过载或暂停维修

    504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长

    505——服务器不支持或拒绝支请求头中指定的HTTP版本

    常见攻击和防御手段,未整理完的

    1. SQL注入
    2. 跨站脚本攻击(XSS)
    3. 跨站请求伪造攻击(CSRF)
    4. Http Heads攻击
    5. DOS/DDOS

    HTTP是基于传输层TCP协议的,而TCP是一个端到端的面向连接的协议

    1. 会话劫持
    2. HTTP身份验证
    3. 每个字段都可被用来攻击,可以对字段进行分安全级别,由用户来选择安全级别,高安全级别检验更多字段。字段内容,字段长度

    可以把http的攻击按照不同阶段进行罗列

    如果有一天我们淹没在茫茫人海中,庸碌一生,那一定是我们没有努力活得丰盛
  • 相关阅读:
    FreeBSD 里面用 ADSL 来上网的设置
    功能齐全的DataGrid
    jsp中动态生成图像
    配置Struts应用解读Struts应用的两大配置文件
    spring 事务配置
    文件上传原理简单实现
    html中position两属性relative和absolute区别
    html 窗口参数详解
    hibernate联合主键的使用
    自动投票的一个脚本
  • 原文地址:https://www.cnblogs.com/xiachj/p/4112134.html
Copyright © 2020-2023  润新知