# HTTP

## **📋 Índice**

1. [Conceitos Fundamentais](#-conceitos-fundamentais)
2. [Arquitetura e Componentes](#-arquitetura-e-componentes)
3. [Métodos HTTP e Segurança](#-métodos-http-e-segurança)
4. [Gerenciamento de Estado](#-gerenciamento-de-estado)
5. [Headers de Segurança](#-headers-de-segurança)
6. [Versões do Protocolo](#-versões-do-protocolo)
7. [Vulnerabilidades e Ataques](#-vulnerabilidades-e-ataques)
8. [Ferramentas de Análise](#-ferramentas-de-análise)
9. [Checklists de Segurança](#-checklists-de-segurança)

***

## **🔍 Conceitos Fundamentais**

### **O que é HTTP?**

O **HTTP (Hypertext Transfer Protocol)** é um protocolo de camada de aplicação (Layer 7 - Modelo OSI) que serve como a base para a troca de dados na Web. Ele utiliza um modelo **cliente-servidor** e opera sobre o protocolo **TCP** (geralmente porta 80 para HTTP e 443 para HTTPS).

### **Características Essenciais**

| Característica | Descrição                      | Implicação de Segurança                                            |
| -------------- | ------------------------------ | ------------------------------------------------------------------ |
| **Stateless**  | Cada requisição é independente | Necessidade de cookies/sessões → vetor para CSRF, session fixation |
| **Textual**    | Mensagens em texto legível     | Facilita análise, mas permite injeção de cabeçalhos                |
| **Extensível** | Headers personalizados         | Possibilidade de headers maliciosos ou informações sensíveis       |
| **Cacheable**  | Respostas podem ser cacheadas  | Risco de exposição de dados sensíveis em cache                     |

### **Modelo Cliente-Servidor**

```mermaid
graph LR
    subgraph Cliente
        A[Navegador] --> B[Requisição HTTP]
        C[Resposta HTTP] --> D[Renderização]
    end
    
    subgraph Servidor
        E[Recebe Requisição] --> F[Processa]
        F --> G[Gera Resposta]
    end
    
    B -->|TCP/IP| E
    G -->|TCP/IP| C
```

***

## **🏗️ Arquitetura e Componentes**

### **Estrutura da Mensagem HTTP**

#### **Requisição HTTP**

```http
[METHOD] [URI] HTTP/[VERSION]
[Header-Name]: [Header-Value]
[Header-Name]: [Header-Value]
[Empty Line]
[Body]
```

#### **Resposta HTTP**

```http
HTTP/[VERSION] [STATUS] [REASON-PHRASE]
[Header-Name]: [Header-Value]
[Header-Name]: [Header-Value]
[Empty Line]
[Body]
```

### **Exemplo Prático - Requisição Completa**

```http
POST /api/transfer HTTP/1.1
Host: banco.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: application/json, text/plain, */*
Accept-Language: pt-BR,pt;q=0.9
Accept-Encoding: gzip, deflate, br
Content-Type: application/json
Content-Length: 78
Origin: https://banco.com
Referer: https://banco.com/transfer
Cookie: sessionId=abc123def456; _csrf=xyz789
Connection: keep-alive

{
    "destination": "12345-6",
    "amount": 1000.00,
    "description": "Pagamento"
}
```

### **Anatomia da Resposta**

```http
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 21 Mar 2026 14:30:00 GMT
Content-Type: application/json
Content-Length: 156
Connection: keep-alive
Cache-Control: no-store, no-cache, must-revalidate
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'self'

{
    "status": "success",
    "transactionId": "TXN987654321",
    "message": "Transferência realizada com sucesso"
}
```

***

## **📋 Métodos HTTP e Segurança**

### **Tabela Completa de Métodos**

| Método      | Descrição                      | Seguro | Idempotente | Cacheable | Vulnerabilidades Comuns                           |
| ----------- | ------------------------------ | ------ | ----------- | --------- | ------------------------------------------------- |
| **GET**     | Recupera recurso               | ✅      | ✅           | ✅         | CSRF (se modifica estado), Information Disclosure |
| **HEAD**    | Recupera apenas cabeçalhos     | ✅      | ✅           | ✅         | Information Disclosure via headers                |
| **POST**    | Envia dados para processamento | ❌      | ❌           | ⚠️\*      | CSRF, SQL Injection, XSS                          |
| **PUT**     | Substitui recurso              | ❌      | ✅           | ❌         | CSRF, Mass Assignment                             |
| **DELETE**  | Remove recurso                 | ❌      | ✅           | ❌         | CSRF, IDOR                                        |
| **PATCH**   | Modificação parcial            | ❌      | ❌           | ❌         | CSRF, Mass Assignment                             |
| **OPTIONS** | Descobre métodos suportados    | ✅      | ✅           | ✅         | Information Disclosure                            |
| **TRACE**   | Echo da requisição             | ✅      | ✅           | ❌         | XST (Cross-Site Tracing)                          |
| **CONNECT** | Estabelece túnel               | ❌      | ❌           | ❌         | Proxy Abuse                                       |

> \*POST não é cacheable por padrão, mas pode ser com headers específicos

### **Métodos Perigosos - Análise de Risco**

```mermaid
graph TD
    subgraph Métodos de Risco
        A[POST/PUT/DELETE/PATCH]
        B[TRACE]
        C[OPTIONS]
    end
    
    subgraph Riscos
        A -->|CSRF| D[Ações não autorizadas]
        A -->|Injeção| E[SQLi, XSS, Command Injection]
        B -->|XST| F[Roubo de cookies via XSS]
        C -->|Info Disclosure| G[Exposição de métodos internos]
    end
```

***

## **🍪 Gerenciamento de Estado**

### **Cookies - Mecanismo de Estado**

#### **Fluxo de Cookies**

```mermaid
sequenceDiagram
    participant C as Cliente
    participant S as Servidor
    
    C->>S: Requisição (sem cookies)
    S-->>C: Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict
    Note over C: Armazena cookie
    C->>S: Requisição + Cookie: sessionId=abc123
    S-->>C: Resposta baseada na sessão
```

#### **Atributos de Segurança de Cookies**

| Atributo            | Sintaxe                      | Função de Segurança          | Bypass/Mitigação                                                            |
| ------------------- | ---------------------------- | ---------------------------- | --------------------------------------------------------------------------- |
| **HttpOnly**        | `HttpOnly`                   | Impede acesso via JavaScript | Não pode ser bypassado diretamente; XSS ainda pode fazer ações autenticadas |
| **Secure**          | `Secure`                     | Envia apenas sobre HTTPS     | Não previne ataques em conexões HTTPS comprometidas                         |
| **SameSite**        | `SameSite=Strict\|Lax\|None` | Controla envio cross-site    | `Lax` permite CSRF via navegação top-level; `None` requer Secure            |
| **Domain**          | `Domain=exemplo.com`         | Restringe domínio            | Configuração ampla pode expor subdomínios                                   |
| **Path**            | `Path=/api`                  | Restringe caminho            | Pode ser contornado com path traversal                                      |
| **Max-Age/Expires** | `Max-Age=3600`               | Define tempo de vida         | Sessões longas aumentam janela de ataque                                    |
| **Partitioned**     | `Partitioned`                | Isola cookies em CHIPS       | Mitiga ataques cross-site em navegadores modernos                           |

### **Exemplo de Cookie Seguro**

```http
Set-Cookie: sessionId=abc123def456; 
           HttpOnly; 
           Secure; 
           SameSite=Strict; 
           Max-Age=3600; 
           Path=/; 
           Domain=banco.com
```

### **Sessões vs Tokens**

| Aspecto            | Sessões Tradicionais   | Tokens (JWT, OAuth)                |
| ------------------ | ---------------------- | ---------------------------------- |
| **Armazenamento**  | Servidor               | Cliente (cookie/storage)           |
| **Estado**         | Stateful               | Stateless                          |
| **CSRF**           | Suscetível sem tokens  | Suscetível se armazenado em cookie |
| **XSS**            | Protegido com HttpOnly | Vulnerável se em localStorage      |
| **Revogação**      | Imediata               | Complexa (requer blacklist)        |
| **Escalabilidade** | Requer sticky sessions | Nativamente escalável              |

***

## **🛡️ Headers de Segurança**

### **Headers Essenciais e Configuração**

#### **1. Content-Security-Policy (CSP)**

```http
# CSP Restritivo (Recomendado)
Content-Security-Policy: default-src 'self'; 
                         script-src 'self' https://trusted.cdn.com; 
                         style-src 'self' 'unsafe-inline'; 
                         img-src 'self' data: https:; 
                         frame-ancestors 'none';
                         base-uri 'self';
                         form-action 'self';
```

| Diretiva          | Função                                 | Exemplo                          |
| ----------------- | -------------------------------------- | -------------------------------- |
| `default-src`     | Fallback para outras diretivas         | `'self'`                         |
| `script-src`      | Controla origem de scripts             | `'self' https://apis.google.com` |
| `style-src`       | Controla origem de estilos             | `'self' 'unsafe-inline'`         |
| `img-src`         | Controla origem de imagens             | `'self' data: https:`            |
| `frame-ancestors` | Controla embedding (anti-clickjacking) | `'none'` ou `'self'`             |
| `form-action`     | Controla destinos de formulários       | `'self'`                         |

#### **2. Strict-Transport-Security (HSTS)**

```http
# HSTS com preload
Strict-Transport-Security: max-age=31536000; 
                           includeSubDomains; 
                           preload
```

| Parâmetro           | Descrição                                    |
| ------------------- | -------------------------------------------- |
| `max-age`           | Tempo em segundos para forçar HTTPS          |
| `includeSubDomains` | Aplica a todos os subdomínios                |
| `preload`           | Inclui na lista HSTS preload dos navegadores |

#### **3. Headers de Proteção Adicionais**

```http
# Previne MIME type sniffing
X-Content-Type-Options: nosniff

# Controle de referer
Referrer-Policy: strict-origin-when-cross-origin

# Política de permissões (antiga Feature-Policy)
Permissions-Policy: geolocation=(), microphone=(), camera=()

# Previne clickjacking (alternativa ao CSP frame-ancestors)
X-Frame-Options: DENY

# Cross-Origin Resource Sharing (CORS)
Access-Control-Allow-Origin: https://trusted-site.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type, Authorization
```

### **Matriz de Headers por Tipo de Aplicação**

| Header                 | API REST | SPA   | Site Tradicional | Banco/Fintech |
| ---------------------- | -------- | ----- | ---------------- | ------------- |
| CSP                    | ⭐⭐       | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐            | ⭐⭐⭐⭐⭐         |
| HSTS                   | ⭐⭐⭐⭐     | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐            | ⭐⭐⭐⭐⭐         |
| X-Frame-Options        | ⭐⭐       | ⭐⭐⭐⭐  | ⭐⭐⭐⭐⭐            | ⭐⭐⭐⭐⭐         |
| X-Content-Type-Options | ⭐⭐⭐⭐     | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐            | ⭐⭐⭐⭐⭐         |
| CORS                   | ⭐⭐⭐⭐⭐    | ⭐⭐⭐⭐⭐ | ⭐⭐⭐              | ⭐⭐⭐⭐          |

***

## **📡 Versões do Protocolo**

### **Comparativo HTTP/1.1 vs HTTP/2 vs HTTP/3**

| Característica            | HTTP/1.1            | HTTP/2                   | HTTP/3                |
| ------------------------- | ------------------- | ------------------------ | --------------------- |
| **Transporte**            | TCP                 | TCP (com TLS)            | UDP (QUIC)            |
| **Multiplexação**         | ❌ (1 req/conn)      | ✅ (múltiplas streams)    | ✅ (múltiplas streams) |
| **Header Compression**    | ❌                   | ✅ (HPACK)                | ✅ (QPACK)             |
| **Server Push**           | ❌                   | ✅                        | ✅                     |
| **Handshake**             | TCP + TLS (2-3 RTT) | TCP + TLS (2-3 RTT)      | 0-1 RTT (QUIC)        |
| **Head-of-Line Blocking** | ❌ (parcial)         | ❌ (TCP level)            | ✅ (eliminado)         |
| **Segurança**             | Opcional (HTTPS)    | Obrigatório (na prática) | Obrigatório (QUIC)    |

### **Implicações de Segurança por Versão**

#### **HTTP/1.1**

```http
GET /api/data HTTP/1.1
Host: exemplo.com
Connection: keep-alive
```

**Riscos:**

* **Request Smuggling** - Ambiguidade no parsing de headers `Content-Length` vs `Transfer-Encoding`
* **Header Injection** - Quebra de linha (`\r\n`) permite injeção
* **Cache Poisoning** - Headers conflitantes

#### **HTTP/2**

```http
:method: GET
:scheme: https
:authority: exemplo.com
:path: /api/data
```

**Riscos Adicionais:**

* **Stream Multiplexing Abuse** - Injeção em streams paralelas
* **HPACK Exploits** - Compressão de headers pode vazar informações
* **Settings Frame Attacks** - Configurações maliciosas de stream

#### **HTTP/3 (QUIC)**

```http
# Camada criptografada por padrão
# Handshake integrado com TLS 1.3
```

**Benefícios de Segurança:**

* **Criptografia obrigatória** - Todo tráfego é criptografado
* **Connection Migration** - Suporte a mudança de rede sem nova handshake
* **Melhor isolamento** - Streams independentes

***

## **⚠️ Vulnerabilidades e Ataques**

### **Matriz de Ataques HTTP**

| Ataque                     | Vetor                            | Impacto                            | Prevenção                         |
| -------------------------- | -------------------------------- | ---------------------------------- | --------------------------------- |
| **CSRF**                   | Cookies enviados automaticamente | Ações não autorizadas              | CSRF tokens, SameSite=Strict      |
| **XSS**                    | Injeção de scripts em respostas  | Roubo de sessão, defacement        | CSP, sanitização, HttpOnly        |
| **SQL Injection**          | Parâmetros não sanitizados       | Acesso/alteracão de dados          | Prepared statements, validação    |
| **Header Injection**       | Caracteres especiais em headers  | Cache poisoning, XSS               | Validação, encoding               |
| **Host Header Injection**  | Host falsificado                 | Password reset poisoning           | Validação de Host, white-list     |
| **HTTP Request Smuggling** | Ambiguidade no parsing           | Request hijacking, cache poisoning | Normalização, HTTP/2+             |
| **Cookie Tossing**         | Subdomínios conflitantes         | Session fixation, CSRF             | Prefixos (`__Host-`, `__Secure-`) |

### **Exemplo Prático - Ataque via Header Injection**

```http
# Requisição maliciosa
GET /redirect?url=https://trusted.com HTTP/1.1
Host: vulnerable.com
User-Agent: Mozilla/5.0\r\n
X-Forwarded-For: 127.0.0.1\r\n
X-Forwarded-Host: evil.com\r\n
\r\n
GET /admin HTTP/1.1
Host: evil.com

# Resultado - Resposta com headers injetados
HTTP/1.1 302 Found
Location: https://evil.com
X-Forwarded-Host: evil.com
```

### **Ataques Específicos por Versão**

#### **HTTP/2 Request Smuggling (CVE-2019-9511)**

```http
# Exploração de diferenças no parsing entre frontend (HTTP/2) e backend (HTTP/1.1)
HEADERS frame
:method: POST
:path: /api/transfer
content-length: 0

DATA frame
0\r\n\r\nPOST /admin HTTP/1.1\r\nContent-Length: 10\r\n\r\n
```

***

## **🛠️ Ferramentas de Análise**

### **Ferramentas Essenciais**

| Ferramenta     | Uso                    | Comando/Exemplo                                                         |
| -------------- | ---------------------- | ----------------------------------------------------------------------- |
| **cURL**       | Testes manuais         | `curl -X POST https://alvo.com/api -H "X-Custom: value" -d "data=test"` |
| **Burp Suite** | Interceptação, análise | Proxy na porta 8080                                                     |
| **OWASP ZAP**  | Scanner automatizado   | `zap-cli quick-scan https://alvo.com`                                   |
| **Wireshark**  | Análise de pacotes     | `tcp.port == 80 or tcp.port == 443`                                     |
| **Nmap**       | Descoberta de serviços | `nmap -p 80,443 --script http-* alvo.com`                               |
| **httpx**      | Probe rápido           | `httpx -title -tech-detect -status-code -url alvo.com`                  |

### **Script de Análise de Headers**

```bash
#!/bin/bash
# security_headers_check.sh

URL=$1

echo "=== Analisando Headers de Segurança: $URL ==="

curl -s -I "$URL" | while IFS= read -r line; do
    case "$line" in
        *"Strict-Transport-Security"*) echo "✅ HSTS: $line" ;;
        *"Content-Security-Policy"*) echo "✅ CSP: $line" ;;
        *"X-Frame-Options"*) echo "✅ X-Frame-Options: $line" ;;
        *"X-Content-Type-Options"*) echo "✅ X-Content-Type-Options: $line" ;;
        *"Referrer-Policy"*) echo "✅ Referrer-Policy: $line" ;;
        *"Set-Cookie"*) echo "🍪 Cookie: $line" ;;
        *) echo "   $line" ;;
    esac
done
```

### **Teste de Métodos HTTP Permitted**

```bash
# Testar métodos permitidos
nmap -p 443 --script http-methods --script-args http-methods.url-path=/api $URL

# Alternativa manual
for method in GET POST PUT DELETE PATCH OPTIONS TRACE; do
    curl -X $method -s -o /dev/null -w "$method: %{http_code}\n" $URL
done
```

***

## **📋 Checklists de Segurança**

### **Checklist para Desenvolvedores**

#### **Configuração de Cookies**

* [ ] `HttpOnly` para cookies de sessão
* [ ] `Secure` para todos os cookies em produção
* [ ] `SameSite=Strict` ou `Lax` configurado
* [ ] Prefixos `__Host-` para cookies críticos
* [ ] Tempo de expiração adequado

#### **Headers de Segurança**

* [ ] CSP configurado (pelo menos `default-src 'self'`)
* [ ] HSTS ativo com `includeSubDomains` e `preload`
* [ ] `X-Frame-Options: DENY` ou CSP `frame-ancestors`
* [ ] `X-Content-Type-Options: nosniff`
* [ ] `Referrer-Policy` configurado
* [ ] `Permissions-Policy` restritivo

#### **Validação e Sanitização**

* [ ] Validação de Host header
* [ ] Sanitização de input para injeção de headers
* [ ] Content-Type validation
* [ ] Limite de tamanho de requisição

### **Checklist para Pentesters**

#### **Reconhecimento**

* [ ] Identificar versão do HTTP (1.1/2/3)
* [ ] Mapear todos os endpoints e métodos
* [ ] Analisar estrutura de cookies
* [ ] Verificar headers de segurança

#### **Testes de Injeção**

* [ ] Testar CRLF injection (`%0d%0a`)
* [ ] Testar Host header injection
* [ ] Testar X-Forwarded-\* injection
* [ ] Testar HTTP Request Smuggling

#### **Testes de Estado**

* [ ] Testar CSRF em todas as ações de estado
* [ ] Verificar session fixation
* [ ] Testar cookie tossing
* [ ] Analisar timeouts de sessão

#### **Testes de Versão**

* [ ] Testar vulnerabilidades específicas HTTP/2
* [ ] Verificar downgrade attacks (HTTP/2 → HTTP/1.1)
* [ ] Testar ALPN negotiation

***

## **🔐 Boas Práticas e Recomendações**

### **Configuração Recomendada (Nginx)**

```nginx
server {
    listen 443 ssl http2;
    server_name exemplo.com;
    
    # SSL/TLS Configuração
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    
    # HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    
    # Security Headers
    add_header X-Frame-Options "DENY" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    
    # CSP
    add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; frame-ancestors 'none';" always;
    
    # Cookies seguros
    proxy_cookie_path / "/; HttpOnly; Secure; SameSite=Strict";
}
```

### **Checklist de Deploy**

```bash
# Verificar headers em produção
curl -I https://exemplo.com | grep -E "Strict-Transport-Security|Content-Security-Policy|X-Frame-Options|X-Content-Type-Options"

# Verificar cookies
curl -I https://exemplo.com | grep -i "set-cookie"

# Testar segurança SSL/TLS
testssl.sh https://exemplo.com

# Verificar configuração CSP
csp-validator https://exemplo.com
```

***

## **📈 Evolução e Tendências**

### **HTTP/3 e QUIC**

* **Criptografia por padrão** - Reduz ataques de downgrade
* **0-RTT** - Melhor performance mas riscos de replay
* **Connection Migration** - Benefícios e novos vetores de ataque

### **Futuro do HTTP**

* **HTTP/4** - Em discussão pelo IETF
* **WebTransport** - Nova API para comunicação bidirecional
* **Privacy Sandbox** - Mudanças em cookies e rastreamento

***

## **📚 Referências e Padrões**

* **RFC 9110** - HTTP Semantics
* **RFC 9111** - HTTP Caching
* **RFC 9112** - HTTP/1.1
* **RFC 9113** - HTTP/2
* **RFC 9114** - HTTP/3
* **RFC 6265** - Cookie Management
* **OWASP** - HTTP Security Headers Cheat Sheet
* **Mozilla Observatory** - Security Scanner


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/conceitos/redes/protocolos-de-rede/http.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
