Special HTTP headers

支持 HackTricks

字典与工具

更改位置的头

重写 IP 源

  • X-Originating-IP: 127.0.0.1

  • X-Forwarded-For: 127.0.0.1

  • X-Forwarded: 127.0.0.1

  • Forwarded-For: 127.0.0.1

  • X-Forwarded-Host: 127.0.0.1

  • X-Remote-IP: 127.0.0.1

  • X-Remote-Addr: 127.0.0.1

  • X-ProxyUser-Ip: 127.0.0.1

  • X-Original-URL: 127.0.0.1

  • Client-IP: 127.0.0.1

  • X-Client-IP: 127.0.0.1

  • X-Host: 127.0.0.1

  • True-Client-IP: 127.0.0.1

  • Cluster-Client-IP: 127.0.0.1

  • Via: 1.0 fred, 1.1 127.0.0.1

  • Connection: close, X-Forwarded-For (检查逐跳头)

重写 位置

  • X-Original-URL: /admin/console

  • X-Rewrite-URL: /admin/console

逐跳头

逐跳头是设计用于由当前处理请求的代理处理和消费的头,与端到端头相对。

  • Connection: close, X-Forwarded-For

hop-by-hop headers

HTTP 请求走私

  • Content-Length: 30

  • Transfer-Encoding: chunked

HTTP Request Smuggling / HTTP Desync Attack

缓存头

服务器缓存头

  • X-Cache 在响应中可能有值 miss 当请求未被缓存,值 hit 当它被缓存

  • 在头 Cf-Cache-Status 中有类似的行为

  • Cache-Control 指示资源是否被缓存以及下次缓存资源的时间:Cache-Control: public, max-age=1800

  • Vary 通常在响应中使用,以 指示额外的头,这些头被视为 缓存键的一部分,即使它们通常不作为键。

  • Age 定义对象在代理缓存中存在的时间(以秒为单位)。

  • Server-Timing: cdn-cache; desc=HIT 也指示资源已被缓存

Cache Poisoning and Cache Deception

本地缓存头

  • Clear-Site-Data: 指示应删除的缓存的头:Clear-Site-Data: "cache", "cookies"

  • Expires: 包含响应应过期的日期/时间:Expires: Wed, 21 Oct 2015 07:28:00 GMT

  • Pragma: no-cacheCache-Control: no-cache 相同

  • Warning: Warning 一般 HTTP 头包含有关消息状态可能存在问题的信息。响应中可能出现多个 Warning 头。Warning: 110 anderson/1.3.37 "Response is stale"

条件请求

  • 使用这些头的请求:If-Modified-SinceIf-Unmodified-Since 仅在响应头 Last-Modified 包含不同时间时才会返回数据。

  • 使用 If-MatchIf-None-Match 的条件请求使用 Etag 值,因此如果数据(Etag)已更改,Web 服务器将发送响应的内容。Etag 是从 HTTP 响应中获取的。

  • Etag 值通常是 基于响应的内容计算的。例如,ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI" 表示 Etag37 字节Sha1

范围请求

  • Accept-Ranges: 指示服务器是否支持范围请求,如果支持,则以哪种单位表示范围。Accept-Ranges: <range-unit>

  • Range: 指示服务器应返回文档的哪一部分。

  • If-Range: 创建一个条件范围请求,仅在给定的 etag 或日期与远程资源匹配时满足。用于防止从不兼容版本的资源下载两个范围。

  • Content-Range: 指示部分消息在完整消息中的位置。

消息体信息

  • Content-Length: 资源的大小,以字节的十进制数表示。

  • Content-Type: 指示资源的媒体类型

  • Content-Encoding: 用于指定压缩算法。

  • Content-Language: 描述面向受众的人类语言,以便允许用户根据用户自己的首选语言进行区分。

  • Content-Location: 指示返回数据的备用位置。

从渗透测试的角度来看,这些信息通常是“无用的”,但如果资源被 保护 由 401 或 403,并且你能找到某种 方法获取 这些 信息,这可能会是 有趣的。 例如,在 HEAD 请求中 RangeEtag 的组合可以通过 HEAD 请求泄露页面的内容:

  • 带有头 Range: bytes=20-20 的请求和包含 ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y" 的响应泄露了字节 20 的 SHA1 为 ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y

服务器信息

  • Server: Apache/2.4.1 (Unix)

  • X-Powered-By: PHP/5.3.3

控制

  • Allow: 此头用于传达资源可以处理的 HTTP 方法。例如,它可能被指定为 Allow: GET, POST, HEAD,表示资源支持这些方法。

  • Expect: 客户端用于传达服务器需要满足的期望,以便请求能够成功处理。一个常见的用例涉及 Expect: 100-continue 头,表示客户端打算发送大量数据负载。客户端在继续传输之前会寻找 100 (Continue) 响应。此机制有助于通过等待服务器确认来优化网络使用。

下载

  • Content-Disposition 头在 HTTP 响应中指示文件应显示为 内联(在网页内)还是作为 附件(下载)。例如:

Content-Disposition: attachment; filename="filename.jpg"

这意味着名为 "filename.jpg" 的文件旨在被下载和保存。

安全头部

内容安全策略 (CSP)

Content Security Policy (CSP) Bypass

受信任的类型

通过 CSP 强制实施受信任的类型,应用程序可以防止 DOM XSS 攻击。受信任的类型确保只有符合既定安全政策的特定构造对象可以用于危险的 Web API 调用,从而默认保护 JavaScript 代码。

// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
}
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped;  // Results in safe assignment.

X-Content-Type-Options

此头部防止 MIME 类型嗅探,这种做法可能导致 XSS 漏洞。它确保浏览器尊重服务器指定的 MIME 类型。

X-Content-Type-Options: nosniff

X-Frame-Options

为了对抗点击劫持,此头部限制了文档如何嵌入在 <frame><iframe><embed><object> 标签中,建议所有文档明确指定其嵌入权限。

X-Frame-Options: DENY

跨源资源策略 (CORP) 和跨源资源共享 (CORS)

CORP 对于指定哪些资源可以被网站加载至关重要,减轻跨站泄漏。另一方面,CORS 允许更灵活的跨源资源共享机制,在某些条件下放宽同源策略。

Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

跨源嵌入者策略 (COEP) 和跨源打开者策略 (COOP)

COEP 和 COOP 对于启用跨源隔离至关重要,显著降低了类似 Spectre 攻击的风险。它们分别控制跨源资源的加载和与跨源窗口的交互。

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

HTTP Strict Transport Security (HSTS)

最后,HSTS 是一种安全功能,强制浏览器仅通过安全的 HTTPS 连接与服务器通信,从而增强隐私和安全性。

Strict-Transport-Security: max-age=3153600

参考文献

支持 HackTricks

Last updated