• 《图解HTTP》


    图解HTTP

    web及网络基础

    http1.0

    http1.1

    TCP/IP协议族

    IP协议

    • 作用:把各种数据包传送给对方
      • IP地址
        • 指明节点被分配到的地址
      • MAC地址
        • 网卡所属的固定地址
        • ARP协议依赖MAC地址进行通信

    TCP协议

    • 提供字节流服务:将大块数据分割为报文段进行传输
    • 三次握手
      • SYN
      • SYN/ACK
      • ACK

    DNS服务

    • 将域名和IP地址相互映射
    • 对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符

    URI(统一资源标识符)

    格式

    • 登录信息()
    • 服务器地址
    • 服务器端口号
    • 带层次的文件路径
    • 查询字符串
    • 片段标识符

    URL(统一资源定位符)

    URL:是URI常用协议的一个子集

    组成

    • 第一部分:协议,如:HTTP、FTP、MHTML等
    • 第二部分:主机的IP地址,有时也包括端口
    • 第三部分:资源文件名,通常包含目录在内

    简单的HTTP协议1.1

    持久连接问题

    HTTP keep-alive

    • 解决了:HTTP每通信一次就断开TCP连接的问题

    管线化

    • 无需等待响应,可并行发送多个请求

    无状态协议

    • 每次http通信都需要重新验证用户身份
    • 解决方法:cookie技术
      • 服务器响应报文中的Set-Cookie通知客户端保存Cookie

    请求URI

    • 不是访问特定资源而是对服务器本身发起的请求使用 * 代替URI

    请求与响应间的通信

    方法(报文中起始行的开头)

    • 注:方法名区分大小写
    • GET(获取资源)
    • POST(传输实体主体)
    • PUT(传输文件)
      • 自身不带验证机制
    • HEAD(获得报文首部)
      • 用于确认URI的有效性
    • DELETE(删除资源)
      • 自身不带验证机制
    • OPTIONS(询问支持的方法)
    • TRACE(追踪路径)
      • 确认连接过程中发生的一系列操作
        • XST(跨站追踪)攻击
    • CONNECT(要求用隧道协议连接代理)
      • 实现用隧道协议进行TCP通信
        • TLS协议
        • SSL协议
        • 格式:CONNECT 代理服务器名 :端口号 HTTP版本

    HTTP报文的HTTP信息

    概念

    报文(HTTP通信中的基本单位,由8位组字节流组成)

    • HTTP协议交互的信息
      • 报文首部
      • 报文主体
    • 注:报文首部与报文主体用 CR + LF (回车+换行)实现空行,十六进制为 0x0d 和 0x0a

    实体(作为请求或响应的有效载荷数据被传输)

    • 实体首部

    • 实体主体

    • 注:通常,报文主体等于实体主体,只有当传输内容进行编码操作时,二者才会不同。

    编码提升传输速率

    内容编码

    • 实体信息原样压缩
      • gzip
      • deflate(zlib)
      • identity(不进行编码)

    分块传输编码

    • 把大量数据分割成块

    多部分对象集合

    范围请求

    内容协商

    http报文的组成

    HTTP状态码

    注:状态码经常与状态不一致

    1xx

    • 信息性状态码

    2xx

    • 成功状态码
      • 200
      • 204
        • 没有资源返回
      • 206
        • 表客户端进行了范围请求

    3xx

    • 重定向状态码
      • 301
        • 永久URI更新
      • 302
        • 临时URI更新
      • 303
      • 307
    • 304
      • (不属于重定向)表客户端未满足访问条件

    4xx

    • 客户端错误状态码
      • 400
        • 请求报文中有语法错误
      • 401
        • 发送的请求未通过HTTP认证
      • 403
        • 服务器拒绝访问
      • 404
        • 服务器上没有请求的资源

    5xx

    • 服务器错误状态码
      • 500
        • 服务器本身发生错误
      • 503
        • 服务器超负荷或停机

    与HTTP协作的web服务器

    单个主机托管多个域名

    • 多个域名指向同一ip地址,请求访问时需在Host中指明完整的主机名或域名的URL

    通信数据转发

    代理

    • 不改变请求URL
    • 通过代理服务器的请求或响应会追加写入Via首部信息
    • 分类1
      • 缓存代理(Caching proxy)
        • 将资源副本保存在服务器上
      • 透明代理(Transparent proxy)
        • 不对报文做任何加工
    • 分类2
      • 正向代理
        • 目标服务器是不知道真正的客户端是谁
        • 客户端知道代理服务器和web服务器的存在
        • 可以隐藏客户端真实IP
      • 反向代理(CDN)
        • 客户端是不知道真正的目标服务器是谁
        • 客户端不知道web服务器的存在
        • 隐藏服务器真实IP

    网关

    • 能使通信线路上的服务器提供非HTTP协议服务
    • 提高通信的安全性

    隧道

    • 实现远距离的安全通信
    • SSL加密

    HTTP首部

    请求报文

    • 方法
    • URI
    • HTTP版本
    • HTTP首部字段

    响应报文

    • HTTP版本
    • 状态码
    • HTTP首部字段

    HTTP首部字段

    实际用途分类

    • 通用首部字段
    • 请求
    • 响应
    • 实体

    缓存代理/非缓存代理

    • 端到端首部(End-to-end Header)
      • 此类别中的首部会转发给最终的接收目标,且必须保存在由缓存生成的响应中,另外规定,它必须被转发
    • 逐跳首部(Hop-by-hop Header)
      • 只对单次转发有效,会因通过缓存或代理而不再转发
        • Connection
        • Keep-Alive
        • Proxy-Authenticate
        • Proxy-Authorization
        • Trailer
        • TE
        • Transfer-Encoding
        • Upgrade
        • 注:除以上8个,其他都属于端到端

    为Cookie服务的首部字段

    • Set-Cookie(响应首部字段)
      • 属性
        • NAME=VALUE
          • Cookie的名称和值
        • expires=DATE
          • Cookie的有效期
        • path=PATH
          • 将服务器上的文件目录作为Cookie的适用对象
        • domain=域名
          • 作为Cookie适用对象的域名
        • Secure
          • 仅在HTTPS安全连接时才会发送Cookie
        • HttpOnly
          • 使Cookie不能被JavaScript脚本访问
            • 防止XSS跨站脚本攻击
    • Cookie(请求首部字段)
      *

    其他首部字段

    • X-Frame-Options
      • 防止点击劫持攻击
    • X-XSS-Protection
      • 防止XSS跨站攻击
    • DNT
    • P3P

    HTTPS

    HTTP缺点

    • HTTP的防篡改措施
      • SHA-1
      • MD5
    • 明文传输
    • 无法验证通信方身份
      • 接收大量无意义的请求,导致DoS攻击(拒绝服务攻击)
    • 无法验证报文的完整性
      • 报文可能被修改,导致中间人攻击(MITM)

    HTTP+SSL

    加密

    • 对称密钥加密(共享密钥加密)
      • 解密与加密使用同一密钥,所以密钥会发送给解密之人
    • 公开密钥加密
      • 一对非对称密钥
        • 私有密钥
          • 解密方使用该密钥解密
        • 公开密钥
          • 加密方使用该密钥进行加密
    • 总结:公开密钥加密解决了共享密钥在传输时被窃取的危险
    • HTTPS的混合加密
      • 在交换密钥环节使用公开密钥加密,建立通信后,使用共享密钥加密

    认证

    • 查找证书
    • 公钥证书(数字证书)
      • 解决公钥在传输过程中可能被替换的问题

    确认用户访问身份的认证

    HTTP的认证方式

    BASIC认证

    • 发送请求后收到 状态码401,然后客户端将账户密码用 : 连接,再base64加密后传输给服务器

    DIGEST认证(摘要认证)

    • 可防止窃听,但不防止用户伪装
    • 质询/响应的方式

    SSL客户端认证

    • 客户端证书认证
    • 双因素认证
      • 客户端认证
      • 表单认证

    FormBase认证(基于表单认证)

    • Cookie管理Session(会话)
      • Session是指用户从打开浏览器访问服务器到关闭浏览器之间的会话状态,在一个会话期间,服务器会自动分配一个标识SessionId。Session可以存储用户访问服务器的一些传递资料信息
      • Session对象和Cookie对象相比的差别在于,Cookie存储在客户端的浏览器中,而Session对象存储在服务器端
      • 存在XSS攻击

    基于 HTTP的其他协议

    HTTP缺点:

    SNS(社交网络服务)需要实时更新网页内容,导致频繁的从客户端到服务端访问,若没有内容更新,则会浪费资源

    解决方法

    Ajax(异步+JavaScript+XML)

    • 核心:API : XMLHttpRequest
    • 通过调用JavaScript脚本与服务器建立通信,从web页面发起请求,更新局部内容
    • 缺点:产生大量请求

    Comet

    • 延迟应答
      • 接到请求后先将挂起,待服务端有内容更新时,再返回响应
    • 缺点:为了维持连接 ,会消耗较多资源

    SPDY

    • 以会话层的形式加入
    • 功能
      • 多路复用流
      • 赋予请求优先级
      • 压缩HTTP首部
      • 推送功能
      • 服务器提示功能

    WebSocket

    构建web内容的技术

    HTML

    CSS

    JavaScript

    • 动态HTML

    DOM

    • 用来操作HTML和XML的API

    web应用

    内容

    • 静态内容
    • 动态内容
      • 由程序创建

    CGI(通用网关接口)

    • 将请求转给CGI程序处理的一种机制
    • CGI程序
      • PHP
      • Ruby
      • Perl

    Servlet

    • 运行的环境:Web容器或Servlet容器
    • 优点:运行在与web服务器相同的进程中,受到的负载小,而CGI每次接受请求都要启动,访问量大时,会导致服务器负载过大

    数据发布的格式及语言

    • XML(可拓展标记语言)
      • 使数据容易读取
    • 发布更新信息的RSS/Atom
    • JSON

    web的攻击技术

    攻击类别

    被动攻击(设计陷阱使用户触发,执行攻击代码)

    • XSS
    • HTTP首部注入攻击
    • 会话固定攻击
    • 跨站点请求伪造(CSRF)

    主动攻击(直接访问web应用,传入攻击代码)

    • SQL注入
      • 非法查看或篡改数据
      • 规避认证
      • 执行相关程序
    • OS命令注入
      • 原理:通过web应用调用shell执行非法的操作系统命令

    因输出值转义不完全导致的漏洞

    XSS

    • 原理:通过web网站的注册用户的浏览器内运行非法HTML标签或JavaScript
    • 危害
      • 利用脚本窃取用户Cookie
      • 显示伪造的文章/图片
      • 利用虚假输入表单骗取用户信息

    HTTP首部注入攻击

    • 原理:在响应首部字段内插入换行,添加任意响应首部或主体
    • 注意:%0D%0A 代表HTTP报文中的换行符
    • 危害
      • 设置任何Cookie信息
      • 重定向至任何URL
      • 显示任意的主体(HTTP响应截断攻击)

    HTTP响应截断攻击

    • 注:%0D%0A%0D%0A 两个连续的换行实现HTTP首部与主体分隔所需的空行

    • 利用插入字符串%0D%0A%0D%0A 可实现伪造主体

    • 危害

      • 用户浏览器显示伪造的web页面
    • 邮件首部注入攻击

      • 利用web应用中的邮件发送功能
      • 向邮件首部To或Subject内添加任意非法内容
    • 目录遍历攻击

      • 子主题 1
    • 远程文件包含漏洞

      • PHP的include 和 require ,5.2.0版本以后默认无效
      • 原理:部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,当脚本读取后,就可运行任意脚本

    因设计缺陷导致的漏洞

    强制浏览

    • 推测文件名及目录
    • 浏览由软件自动生成的备份文件
    • 浏览经认证才可显示的文件

    不正确的错误消息处理

    • 根据错误提示信息,得到其他信息

    开放重定向

    • URL跳转

    因会话管理疏忽导致的漏洞

    会话劫持

    • 获取用户会话ID
    • 获取途径
      • 推测会话ID
      • 窃听或XSS攻击盗取
      • 会话固定攻击强行获取

    会话固定攻击

    • 强制用户使用攻击者指定的会话ID
    • Session Adoption
      • PHP或ASP.NET能够接受处理未知会话ID的功能

    跨站点请求伪造(CSRF)

    • 强制对已完成认证的用户进行非预期的信息更新

    其他

    缓存污染

    密码破解

    • 通过网络的密码试错
      • 穷举法
      • 字典攻击
    • 对已加密的密码破解
      • 穷举/字典
      • 彩虹表
      • 拿到密钥
      • 加密算法的漏洞

    点击劫持

    • 利用透明的按钮或链接,覆盖在web页面上吗,做成陷阱

    DoS攻击

    • 同时发送大量请求,使服务器停止服务
  • 相关阅读:
    BZOJ 3677: [Apio2014]连珠线 树形DP
    TweenMax说明
    vs 中快捷实现父类方法
    Box2d b2World的RayCast方法
    cocos2d-js 帧序列动画
    cocos2d-js 显示帧序列图中的一帧
    不同类型刚体接触测试
    FlashDevelop调试Air出错
    php 创建删除数据库
    本地php 连接 MySQL
  • 原文地址:https://www.cnblogs.com/hacker-snail/p/13837416.html
Copyright © 2020-2023  润新知