Um cookie, no âmbito do protocolo de comunicação HTTP usado na Internet, é um pequeno arquivo de computador[1] ou pacote de dados enviados por um site de Internet para o navegador do usuário, quando o utilizador visita o site. Cada vez que o usuário visita o site novamente, o navegador envia o cookie de volta para o servidor para notificar atividades prévias do usuário. Os cookies foram concebidos para serem um mecanismo confiável para que sítios se lembrem de informações da atividade do usuário,[1] como senhas gravadas, itens adicionados no carrinho de compras em uma loja online, hiperligações que foram clicadas anteriormente, entre outros. Assim, melhoram a experiência de navegação, recuperando informações já fornecidas.[1]
O inventor dos Cookies
Os cookies HTTP foram inventados por Lou Montulli, engenheiro de software da Netscape, em junho de 1994[2]. Com ajuda de John Giannandrea, seu colega, a tecnologia foi introduzida no Netscape no mesmo ano. Montulli deu entrada ao pedido de patente para a tecnologia em 1995 e a patente foi concedida em 1998.
Funcionamento
Quando o servidor deseja activar um cookie no cliente, envia uma linha no cabeçalho HTTP iniciada por Set-Cookie: ...
A partir desse momento, conforme as opções especificadas pelo cookie, o cliente irá enviar no seu cabeçalho HTTP dos pedidos uma linha contendo os cookies relevantes, iniciada por Cookie: ....
Entre os parâmetros dos cookies estão: o tempo de vida (a data para o cookie "expirar a validade") e o domínio, ou grupo de páginas a que o cookie se aplica. Por exemplo, é possível fazer com que um cookie seja aplicado apenas a endereços iniciados por de maneira que esse mesmo cookie já não se aplique para skins, por exemplo.
Se não especificada a data de validade para o cookie, ele irá expirar assim que o usuário fechar o navegador.
Em JavaScript (embutido no HTML da página acessada), podemos criar um script para manipulá-los. Utilizamos "document.cookie" (sem aspas). Em ASP, podemos utilizar cookies por meio dos objetos Response e Request. Em PHP, os cookies são tratados por meio da função setcookie(). Esta deverá vir antes de qualquer dado ser enviado ao navegador, devido ao fato de os cookies fazerem parte do cabeçalho HTTP.
Parâmetros de segurança do cookie
Secure
Instrui o navegador para nunca enviar o cookie sob uma requisição HTTP sem que esta esteja em um canal de comunicação cifrado. O cookie só pode ser enviado através de HTTPS. Isso funciona mesmo se o usuário digitar manualmente um pedido de HTTP. A solicitação HTTP será enviada, mas o navegador não enviará quaisquer cookies marcados como "seguro".
Esta medida visa minimizar o cenário no qual um usuário malicioso induz a vítima a realizar uma requisição HTTP, o que poderá permitir a captura do cookie de sessão da vítima. Tal captura pode ser feita através de ferramentas que analisam o tráfego de rede, como sniffers ou através do log de acesso da aplicação.
Exemplo do HTTP Response:
Set-Cookie: sessiondID=xpto123; secure;
HttpOnly
Dentre os atributos presentes nos cookies, o HttpOnly lida com a permissividade, desta forma, caso esteja habilitado em determinado cookie, este não poderá ser manipulado por códigos client-side como JavaScript, VBscript, etc. Atribuir o parâmetro HttpOnly a um determinado cookie visa dificultar ataques de Cross-Site Scripting, cujo objetivo é realizar sequestro de sessão ou aqueles que visam alterar valores de cookies preestabelecidos.
O atributo HttpOnly é suportado pela maioria dos navegadores modernos. Se o navegador não suportar a flag, ela será ignorada e com isso a mesma fica vulnerável e pode ser alterado por código malicioso.
Exemplo do HTTP Response:
Set-Cookie: sessiondID=xpto123; HttpOnly;
Path
O atributo path instrui o browser a enviar o cookie apenas para o domínio especificado e a todos subdomínios. Se o atributo for definido por padrão como a raiz ("/") do website — pode provocar alguns riscos adicionais à segurança desta aplicação, pois não haverá restrições de envio de cookies para outras aplicações que eventualmente estejam hospedadas em outros diretórios do mesmo servidor web.
Por exemplo, suponha-se que existem duas aplicações no mesmo servidor em pastas distintas, uma em /site1/ e outra em /site2/. O fato de não restringir o escopo do cookie a uma aplicação, fará com que o cookie desta seja acessível para ambas as aplicações.