# Specjalne nagłówki HTTP
Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
## Listy słów i narzędzia
* [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)
## Nagłówki do zmiany lokalizacji
Zmiana **źródła 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` (Sprawdź nagłówki hop-by-hop)
Zmiana **lokalizacji**:
* `X-Original-URL: /admin/console`
* `X-Rewrite-URL: /admin/console`
## Nagłówki hop-by-hop
Nagłówek hop-by-hop jest nagłówkiem zaprojektowanym do przetwarzania i konsumowania przez aktualny serwer proxy obsługujący żądanie, w przeciwieństwie do nagłówka end-to-end.
* `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 %}
## Przemyt żądań 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 %}
## Nagłówki pamięci podręcznej
**Nagłówki pamięci podręcznej serwera**:
* **`X-Cache`** w odpowiedzi może mieć wartość **`miss`**, gdy żądanie nie było buforowane, a wartość **`hit`**, gdy jest buforowane
* Podobne zachowanie w nagłówku **`Cf-Cache-Status`**
* **`Cache-Control`** wskazuje, czy zasób jest buforowany i kiedy zostanie ponownie buforowany: `Cache-Control: public, max-age=1800`
* **`Vary`** jest często używane w odpowiedzi do **wskazania dodatkowych nagłówków**, które są traktowane jako **część klucza pamięci podręcznej**, nawet jeśli zazwyczaj nie są kluczowane.
* **`Age`** określa czas w sekundach, przez jaki obiekt był w pamięci podręcznej serwera proxy.
* **`Server-Timing: cdn-cache; desc=HIT`** również wskazuje, że zasób był buforowany
{% content-ref url="../../pentesting-web/cache-deception.md" %}
[cache-deception.md](../../pentesting-web/cache-deception.md)
{% endcontent-ref %}
**Nagłówki pamięci podręcznej lokalnej**:
* `Clear-Site-Data`: Nagłówek wskazujący, jakie dane pamięci podręcznej należy usunąć: `Clear-Site-Data: "cache", "cookies"`
* `Expires`: Zawiera datę/czas, kiedy odpowiedź powinna wygasnąć: `Expires: Wed, 21 Oct 2015 07:28:00 GMT`
* `Pragma: no-cache` to samo co `Cache-Control: no-cache`
* `Warning`: Ogólny nagłówek HTTP zawiera informacje o możliwych problemach ze stanem wiadomości. W odpowiedzi może pojawić się więcej niż jeden nagłówek `Warning`. `Warning: 110 anderson/1.3.37 "Response is stale"`
## Warunki
* Żądania korzystające z tych nagłówków: **`If-Modified-Since`** i **`If-Unmodified-Since`** zostaną udzielone odpowiedzią tylko wtedy, gdy nagłówek odpowiedzi **`Last-Modified`** zawiera inną godzinę.
* Żądania warunkowe za pomocą **`If-Match`** i **`If-None-Match`** używają wartości Etag, więc serwer WWW wyśle zawartość odpowiedzi, jeśli dane (Etag) zostały zmienione. Wartość `Etag` jest pobierana z odpowiedzi HTTP.
* Wartość **Etag** jest zwykle **obliczana na podstawie** zawartości odpowiedzi. Na przykład `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` wskazuje, że `Etag` to **Sha1** z **37 bajtów**.
## Żądania zakresu
* **`Accept-Ranges`**: Wskazuje, czy serwer obsługuje żądania zakresu, i jeśli tak, w jakiej jednostce zakres może być wyrażony. `Accept-Ranges: `
* **`Range`**: Wskazuje część dokumentu, którą serwer powinien zwrócić.
* **`If-Range`**: Tworzy warunkowe żądanie zakresu, które jest spełnione tylko wtedy, gdy podany etag lub data pasuje do zdalnego zasobu. Służy do zapobiegania pobieraniu dwóch zakresów z niezgodnej wersji zasobu.
* **`Content-Range`**: Wskazuje, gdzie w pełnej wiadomości ciała częściowa wiadomość należy.
## Informacje o treści wiadomości
* **`Content-Length`:** Rozmiar zasobu, w dziesiętnym liczbie bajtów.
* **`Content-Type`**: Wskazuje typ nośnika zasobu
* **`Content-Encoding`**: Używane do określenia algorytmu kompresji.
* **`Content-Language`**: Opisuje język(i) przeznaczony dla odbiorców, dzięki czemu użytkownik może różnicować według własnego preferowanego języka.
* **`Content-Location`**: Wskazuje alternatywną lokalizację zwróconych danych.
Z punktu widzenia testu penetracyjnego te informacje są zazwyczaj "bezużyteczne", ale jeśli zasób jest **chroniony** przez 401 lub 403 i można znaleźć **sposób** na **uzyskanie** tych **informacji**, może to być **interesujące.**\
Na przykład kombinacja **`Range`** i **`Etag`** w żądaniu HEAD może ujawnić zawartość strony za pomocą żądań HEAD:
* Żądanie z nagłówkiem `Range: bytes=20-20` i odpowiedzią zawierającą `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` ujawnia, że SHA1 bajtu 20 to `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y`
## Informacje o serwerze
* `Server: Apache/2.4.1 (Unix)`
* `X-Powered-By: PHP/5.3.3`
## Kontrole
* **`Allow`**: Ten nagłówek służy do komunikowania obsługiwanych metod HTTP przez zasób. Na przykład może być określony jako `Allow: GET, POST, HEAD`, co wskazuje, że zasób obsługuje te metody.
* **`Expect`**: Wykorzystywany przez klienta do przekazywania oczekiwań, które serwer musi spełnić, aby żądanie zostało pomyślnie przetworzone. Powszechne zastosowanie to nagłówek `Expect: 100-continue`, który sygnalizuje, że klient zamierza wysłać duży ładunek danych. Klient oczekuje odpowiedzi `100 (Continue)` przed kontynuacją transmisji. Mechanizm ten pomaga optymalizować wykorzystanie sieci poprzez oczekiwanie na potwierdzenie serwera.
## Pobieranie
* Nagłówek **`Content-Disposition`** w odpowiedziach HTTP określa, czy plik powinien być wyświetlany **inline** (wewnątrz strony internetowej) czy traktowany jako **załącznik** (pobierany). Na przykład:
```
Content-Disposition: attachment; filename="filename.jpg"
```
To oznacza, że plik o nazwie "filename.jpg" ma być pobrany i zapisany.
## Nagłówki zabezpieczeń
### Polityka zabezpieczeń treści (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 %}
### **Zaufane typy**
Poprzez egzekwowanie Zaufanych Typów za pomocą CSP, aplikacje mogą być chronione przed atakami DOM XSS. Zaufane Typy zapewniają, że tylko specjalnie opracowane obiekty, zgodne z ustalonymi politykami bezpieczeństwa, mogą być używane w niebezpiecznych wywołaniach interfejsu API sieci web, co zabezpiecza domyślnie kod JavaScript.
```javascript
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\/g, '>');
});
}
```
```javascript
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
const escaped = policy.createHTML('');
el.innerHTML = escaped; // Results in safe assignment.
```
### **X-Content-Type-Options**
Ten nagłówek zapobiega analizowaniu typu MIME, praktyce, która może prowadzić do podatności na XSS. Zapewnia, że przeglądarki będą szanować typy MIME określone przez serwer.
```
X-Content-Type-Options: nosniff
```
### **X-Frame-Options**
Aby zwalczyć clickjacking, ten nagłówek ogranicza sposób osadzania dokumentów w tagach ``, `