Cookie HTTP

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de Cookie)
Ir para: navegação, pesquisa
Nota: Para o alimento, veja Biscoito e Bolacha

Um cookie é um pequeno pacote de dados enviados de um website para o navegador do usuário quando o usuário 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 designados para ser um mecanismo confiável para que sites se lembrem de informações da atividade do usuário, como senhas gravadas, itens adicionados no carrinho de compras em uma loja online, links que foram clicados anteriormente, entre outros.

Funcionamento[editar | editar código-fonte]

  • Quando o servidor deseja activar um cookie no cliente, envia uma linha no cabeçalho HTTP iniciada por Set-Cookie: ...
  • A partir desse momento, consoante 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). Exemplo:

function setCookie(name, value, expires, path, domain, secure) {
        var curCookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
        document.cookie = curCookie;
}

function getCookie(name) {
       var dc = document.cookie;
       var prefix = name + "=";
       var begin = dc.indexOf("; " + prefix);
       if (begin == -1) {
              begin = dc.indexOf(prefix);
              if (begin != 0) return null;
       } else
       begin += 2;
       var end = document.cookie.indexOf(";", begin);
       if (end == -1)
       end = dc.length;
       return unescape(dc.substring(begin + prefix.length, end));
}

function deleteCookie(name, path, domain) {
       if (getCookie(name)) {
              document.cookie = name + "=" + 
              ((path) ? "; path=" + path : "") +
              ((domain) ? "; domain=" + domain : "") +
              "; expires=Thu, 01-Jan-70 00:00:01 GMT";
              history.go(0);
       }
}

As funções do script acima:

  • setCookie - Define o valor de um cookie
  • getCookie - Retorna o valor de um cookie
  • deleteCookie - Exclui um cookie. Para excluir um cookie, devemos alterar sua data de expiração para uma data inferior a atual (esta função faz exatamente isso).

Em ASP, podemos utilizar cookies por meio dos objetos Response e Request. Exemplo:

  • Para gravar o cookie Response.Cookies("nomedocookie")
  • Para definir a validade do cookie Response.Cookies("momedocookie").Expires = DateAdd("d", 365, Now())
  • Utilize o DateAdd para adicionar uma data. No exemplo acima, adicionamos 365 dias, o que equivale a um ano.
  • Para definir o domínio Response.Cookies("nomedocookie").Domain = "pt.wikipedia.org"
  • Para definir o grupo de páginas que o cookie se aplica Response.Cookies("nomedocookie").Path = "/wiki"
  • Se definido como "/", todo o sítio poderá acessar o cookie.
  • Se quiser, há como adicionar vários valores ao cookie response.Cookie("nomedocookie")("nomedovalor") = "valor"
  • Para ler o cookie , utilize o objeto Request. Exemplo: variavel = Request.Cookies("nomedocookie")
  • E para ler valores variavel = Request.Cookies("nomedocookie")("nomedovalor")

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[editar | editar código-fonte]

Secure[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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

Exemplo do HTTP Response:
Set-Cookie: sessiondID=xpto123; Domain=.site.com; Path=/site1;

Referências

Ligações externas[editar | editar código-fonte]


Ícone de esboço Este artigo sobre redes de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.