HTTP 之 XFF , Referer

HTTP请求头

HTTP请求头是构成HTTP请求的一部分,主要用于传递客户端(如浏览器或其他应用程序)向服务器发送的额外信息,以帮助服务器理解请求的上下文和处理方式。HTTP请求的基本组成部分可以分为三个主要部分:请求行、请求头和请求体。

1. 请求行 (Request Line)

请求行是HTTP请求的第一行,包含了三个主要组件:

  • 请求方法:指示所要执行的操作的HTTP方法,例如 GETPOSTPUTDELETE 等。
  • 请求目标:通常是请求的URL或者资源的路径,比如 /index.html
  • HTTP版本:指示使用的HTTP协议版本,通常是 HTTP/1.1 或 HTTP/2
GET /index.html HTTP/1.1

2. 请求头 (Request Headers)

请求头是请求行之后的一系列键值对,提供了关于请求的附加信息。常见的请求头包括(但不限于):

  • Host:指定请求的主机名和端口号。
    Host: www.example.com
  • Referer:指示当前请求的来源URL(通常拼写为“Referrer”,但在HTTP标准中使用的是Referer)
  • X-Forwarded-For:标识来自客户端的真实IP地址(尤其是在使用代理或负载均衡器的情况下)
  • User-Agent:描述发起请求的客户端软件信息。
  • Accept:告知服务器客户端愿意接收的内容类型。
    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  • Accept-Language:指定客户端能够理解的语言。
    Accept-Language: en-US,en;q=0.5
  • Accept-Encoding:指示支持的内容编码类型。
    Accept-Encoding: gzip, deflate, br
  • Connection:控制是否保持连接的状态。
    Connection: keep-alive
  • Content-Type:指定请求体的数据类型(通常在POST请求中使用)
    Content-Type: application/json
  • Content-Length:指示请求体的字节长度(在POST请求中使用)
    Content-Length: 348
  • Authorization:包含身份验证信息。
    Authorization: Bearer <token>
  • Cookie:传递与请求相关的cookie信息。
    Authorization: Bearer <token>

3. 请求体 (Request Body)

请求体是HTTP请求的可选部分,通常在使用 POSTPUT 等方法时发送。在请求体中包含了要发送到服务器的数据,例如表单数据、JSON数据或文件内容等。请求体的内容类型通常通过 Content-Type 请求头指定。

XFF(Extended Forwarding Format,扩展转发格式)

概念

XFF是网络技术中的一个概念,通常与代理服务器和网络负载均衡器相关。它主要用于 HTTP 请求头部中,以便在通过多个代理的情况下传递客户端的真实 IP 地址。

在 HTTP 协议中,客户端向服务器发送请求时,通常会通过代理服务器。在这种情况下,服务器接收到的请求来自代理而非直接来自客户端。为了让目标服务器知道原始客户端的 IP 地址,代理服务器会在请求头中添加 X-Forwarded-For 头部。

格式

X-Forwarded-For: client1, proxy1, proxy2
  • client1:原始客户端的 IP 地址。
  • proxy1:第一个代理服务器的 IP 地址。
  • proxy2:第二个代理服务器的 IP 地址。

当请求经过多个代理时,X-Forwarded-For 头部会被多个代理依次添加。 

注意事项

  1. 安全性X-Forwarded-For 头部可以被客户端伪造,因此在处理时要小心,只信任内部代理的 IP 地址。配置 Web 服务器时,确保 set_real_ip_fromRemoteIPTrustedProxy 只包含可信任的代理。

  2. 性能:在高流量的场景中,使用 X-Forwarded-For 头部可能对性能有轻微影响,因为它需要解析请求头。

  3. 多个代理:当请求经过多个代理时,X-Forwarded-For 头部会累积多个 IP 地址。应用程序需要解析这些 IP 地址并根据需要处理。

Referer

定义

  • Referer(通常拼写为“Referrer”,但在HTTP标准中使用的是Referer)是一个HTTP请求头,用于指示当前请求的来源URL。也就是说,它告诉服务器请求是从哪个页面链接过来的。

用途

  • 追踪来源:用于分析流量来源,帮助网站管理员了解用户是从哪个页面访问过来的。
  • 安全性:某些网站可能会使用Referer头来限制访问,仅允许来自特定来源的请求。
Referer: https://www.example.com/page1

拿一道题练练手(使用burp) 

攻防世界搜索xff_referer

 欢迎评论区纠正与补充