O que é o protocolo HTTP
O HTTP (Hypertext Transfer Protocol) é um protocolo que atua na camada de aplicação de acordo com o modelo OSI e estabelece um conjunto de regras, padrão para troca de mensagens entre recursos na WEB.
O HTTP possui as seguintes versões:
- HTTP/0.9 (Criado em 1991)
- HTTP/1.0 (Criado em 1996)
- HTTP/1.1 (Criado em 1999)
Não é o propósito deste tutorial explicar os detalhes de cada versão, mais detalhes podem ser obtidos na RFC 2145 (Use and Interpretation of HTTP Version Numbers).
Como trabalha o protocolo HTTP
O protocolo HTTP tem uma característica que é de fundamental entendimento para quem analisa segurança em aplicações WEB, é o fato dele ser stateless, isso significa que ele não mantém uma conexão, ele sempre conecta, envia uma mensagem, recebe uma resposta e desconecta, como ilustra a figura 1.
Figura 1
Por este motivo é utilizado recursos extras como cookie e/ou sessões para garantir a persistência dos dados e informações que são disponibilizados em aplicações.
A figura 2 mostra a visão do protocolo HTTP e seus dados frente a camada TCP/IP, na figura 3 podemos identificar como funciona a comunicação em uma rede de dados e na figura 4 um exemplo de um header (cabeçalho) HTTP.
Figura 2
Figura 3
Figura 4
Quando estamos falando de aplicações WEB geralmente estamos sempre fazendo referência a URI (Uniform Resource Identifiers) como http://wagnerelias.com, técnicamente a URI serve apenas para fazer referência a um determinado domínio, quando precisamos acessar recursos WEB via browser utilizamos a URL(Uniform Resource Locators). Para conseguir identificar e explorar determinados recursos de uma aplicação é essencial que se entenda exatamente o que cada parte de uma URL representa, na figura 5 temos uma descrição de cada parte de uma URL.
Figura 5
Já sabemos o que é um protocolo HTTP, quais as suas principais características, mas é preciso entender quais são seus principais métodos e códigos de status, na figura 6 temos um representação de uma requisição do browser e uma resposta do servidor.
Figura 6
Métodos HTTP
Os métodos, também conhecidos como verbos HTTP, são os seguintes:
- GET: é o método mais comum e tem como característica enviar seus parâmetros direto na URI
- POST: é um método que envia os dados no corpo do header e possui características mais seguras para se enviar requisições ao servidor
- HEAD: semelhante ao GET mas não obtem o recurso, apenas meta dados
- PUT: envia um recurso para o servidor
- DELETE: exclui um recurso do servidor
- TRACE: através da resposta obtida por uma requisição trace é possível saber o que foi alterado na requisição por um servidor intermediário
- OPTIONS: consulta os métodos HTTP que o servidor aceita
- CONNECT: usado em soluções de proxy
Os métodos são informados no momento que é feito uma requisição HTTP ao servidor de aplicação.
Código de Status do HTTP
Os códigos de status estão classificados em cinco tipos.
- 1xx: Informação
- 2xx: Sucesso
- 3xx: Redirecionamento
- 4xx: Erro no cliente
- 5xx: Erro no server
Uma lista completa de códigos de status pode ser obtida aqui. Sempre que uma requisição usando um método HTTP é feita ao server é recebido uma resposta com um status code.
O HTTP também possui recursos de autenticação nativos que pretendo falar mais sobre eles em um post futuro, os dois modelos são:
- Autenticação Básica
- Autenticação Digest
Eu costumo usar muito os recursos do firefox para analisar as requisições e respostas HTTP, os principais addon são estes:
Além dos addon do firefox eu estou usando uma ferramenta desenvolvida pelo tiger team 514 que faz várias requisições usando métodos diferentes e dando o status code de cada uma.
HTTP Methods
Este post foi uma introdução sobre o funcionamento e principais características do http. As referências para este tutorial foram os livros: Whiley - HTTP Essentials Protocols for Secure, Scaleable Web Sites; O'Reilly - HTTP Definitive Guide; Sams - HTTP Developer's Handbook.
8 comentários:
Muito bom o post Wagner. mesmo pra quem já conhece aborda vários detalhes que as vezes até passam despercebidos.
eu que ultimamente não tenho mexido mais com esses detalhes de http/servidores foi bom para relembrar algumas coisas.
abraços
Obrigado Rafael.
[...] por Wagner Elias (weliasΘconviso·com·br) - referência [...]
Gostei do texto, direto ao ponto, indo além do básico. Abraço!
Parabéns pelo post!
Objetivo e muito bem escrito.
Com certeza, a comunidade agradece!
[]s
Muito bom...parabens.. muito didático e esclarecedor!!
Cara, teu blog é mto bacana! Dificilmente encontramos tanto material de qualidade sobre segurança (e afins) no ambiente web! Já tá add nos meus feeds!
Vejo que tenho muita coisa ainda a aprender nessa área!
Abraços, e valeu pelo comentário lá no meu!
Obrigado Chris!
Espero escrever cada vez mais. :)
Abs.
Postar um comentário