# 特殊的HTTP头部
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks的衣物**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
## 字典和工具
* [https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers](https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers)
* [https://github.com/rfc-st/humble](https://github.com/rfc-st/humble)
## 更改位置的头部
重写**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`
* `X-ProxyUser-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`
{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %}
[abusing-hop-by-hop-headers.md](../../pentesting-web/abusing-hop-by-hop-headers.md)
{% endcontent-ref %}
## HTTP请求走私
* `Content-Length: 30`
* `Transfer-Encoding: chunked`
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
[http-request-smuggling](../../pentesting-web/http-request-smuggling/)
{% endcontent-ref %}
## 缓存头部
**服务器缓存头部**:
* 响应中的**`X-Cache`**可能具有值**`miss`**,表示请求未被缓存,值**`hit`**表示已被缓存
* **`Cache-Control`**指示资源是否被缓存以及下次资源将被再次缓存的时间:`Cache-Control: public, max-age=1800`
* **`Vary`**通常在响应中使用,**指示其他头部**被视为**缓存键的一部分**,即使它们通常不是键控的。
* **`Age`**定义了对象在代理缓存中的时间(以秒为单位)。
* **`Server-Timing: cdn-cache; desc=HIT`**还表示资源已被缓存
{% content-ref url="../../pentesting-web/cache-deception.md" %}
[cache-deception.md](../../pentesting-web/cache-deception.md)
{% endcontent-ref %}
**本地缓存头部**:
* `Clear-Site-Data`:指示应该删除的缓存:`Clear-Site-Data: "cache", "cookies"`
* `Expires`:包含响应应该过期的日期/时间:`Expires: Wed, 21 Oct 2015 07:28:00 GMT`
* `Pragma: no-cache`与`Cache-Control: no-cache`相同
* `Warning`:**`Warning`**通用HTTP头部包含有关消息状态可能存在的问题的信息。一个响应中可能会出现多个`Warning`头部。`Warning: 110 anderson/1.3.37 "Response is stale"`
## 条件语句
* 使用这些头部的请求:**`If-Modified-Since`** 和 **`If-Unmodified-Since`**,只有当响应头部的 **`Last-Modified`** 包含不同的时间时,才会返回数据。
* 使用 **`If-Match`** 和 **`If-None-Match`** 的条件请求使用 Etag 值,因此只有当数据(Etag)发生变化时,Web 服务器才会发送响应的内容。`Etag` 是从 HTTP 响应中获取的。
* **Etag** 值通常是基于响应内容进行计算的。例如,`ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` 表示 `Etag` 是响应内容的 **37 字节** 的 **Sha1** 值。
## 范围请求
* **`Accept-Ranges`**:指示服务器是否支持范围请求,以及范围可以用哪种单位表示。`Accept-Ranges: `
* **`Range`**:指示服务器应该返回文档的哪个部分。
* **`If-Range`**:创建一个条件范围请求,只有当给定的 Etag 或日期与远程资源匹配时才会满足。用于防止从不兼容版本的资源下载两个范围。
* **`Content-Range`**:指示部分消息在完整消息体中的位置。
## 消息体信息
* **`Content-Length`**:资源的大小,以十进制字节数表示。
* **`Content-Type`**:指示资源的媒体类型。
* **`Content-Encoding`**:用于指定压缩算法。
* **`Content-Language`**:描述面向受众的人类语言,以便允许用户根据自己的首选语言进行区分。
* **`Content-Location`**:指示返回数据的备用位置。
从渗透测试的角度来看,这些信息通常是“无用的”,但如果资源受到 401 或 403 的保护,并且您可以找到某种方法来获取这些信息,那么这可能是有趣的。\
例如,使用 HEAD 请求中的 **`Range`** 和 **`Etag`** 的组合可以通过 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`**:列出资源支持的方法集。`Allow: GET, POST, HEAD`
* **`Expect`**:**`Expect`** HTTP 请求头部指示服务器需要满足的期望,以正确处理请求。
* 目前除了 `Expect: 100-continue` 之外,没有指定其他期望。通知接收者客户端即将发送一个(可能很大的)消息体,并希望接收到 [`100`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/100)(Continue)的中间响应。
## 下载
* **`Content-Disposition`**:在常规的 HTTP 响应中,**`Content-Disposition`** 响应头部是一个指示内容是否预期在浏览器中以 _inline_ 的方式显示,即作为网页的一部分或整个网页,或者作为 _attachment_ 下载并本地保存的头部。
* `Content-Disposition: attachment; filename="filename.jpg"`
## 安全头部
### 内容安全策略(CSP)
{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %}
[content-security-policy-csp-bypass](../../pentesting-web/content-security-policy-csp-bypass/)
{% endcontent-ref %}
### 受信任类型(Trusted Types)
受信任类型提供了编写、安全审查和维护无 DOM XSS 的应用程序的工具。它们可以通过 [CSP](https://web.dev/security-headers/#csp) 启用,并通过限制危险的 Web API 仅接受特殊对象(受信任类型)来使 JavaScript 代码默认安全。
要创建这些对象,您可以定义安全策略,在其中可以确保在将数据写入 DOM 之前始终应用安全规则(如转义或清理)。这些策略是代码中唯一可能引入 DOM XSS 的地方。
```http
Content-Security-Policy: require-trusted-types-for 'script'
```
```javascript
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => {
return str.replace(/\/g, '>');
}
});
}
```
```javascript
// Assignment of raw strings is blocked by Trusted Types.
el.innerHTML = 'some string'; // This throws an exception.
// Assignment of Trusted Types is accepted safely.
const escaped = policy.createHTML('');
el.innerHTML = escaped; // '<img src=x onerror=alert(1)>'
```
### X-Content-Type-Options
当恶意的HTML文档从您的域名中提供服务时(例如,如果上传到照片服务的图像包含有效的HTML标记),某些浏览器将将其视为活动文档,并允许其在应用程序的上下文中执行脚本,从而导致[跨站脚本漏洞](https://www.google.com/about/appsecurity/learning/xss/)。
`X-Content-Type-Options: nosniff` 通过指示浏览器对给定响应的`Content-Type`头中设置的[MIME类型](https://mimesniff.spec.whatwg.org/#introduction)是正确的,从而防止此问题。建议在**所有资源**中使用此头。
```http
X-Content-Type-Options: nosniff
```
### X-Frame-Options
如果恶意网站可以将您的网站嵌入到iframe中,这可能允许攻击者通过[点击劫持](https://portswigger.net/web-security/clickjacking)来引发用户的意外操作。此外,在某些情况下,[Spectre类型的攻击](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\))给恶意网站提供了了解嵌入文档内容的机会。
`X-Frame-Options`指示浏览器是否允许在``、`