Como ler um cookie HttpOnly usando JavaScript

90

Existe alguma maneira de ler um cookie seguro com JavaScript?
Tentei fazer isso usando document.cookiee, pelo que posso ver neste artigo sobre cookies seguros e sinalizador HttpOnly , não consigo acessar um cookie seguro dessa forma.

Alguém pode sugerir uma solução alternativa?

tzam
fonte
1
Do wiki : Um cookie seguro é usado apenas quando um navegador está visitando um servidor via HTTPS.
Pavel Hodek
6
@Pavel Hodek Esse é o sinalizador errado. O sinalizador de cookie "seguro" não tem nada a ver com o sinalizador de segurança HTTPOnly. Eles têm um sistema de nomenclatura horrível.
torre
1
O título dessas perguntas deve ser alterado para incluir o sinalizador "HttpOnly". Da forma como está, parece que a questão é sobre o sinalizador "Seguro".
Tom

Respostas:

125

Navegadores diferentes permitem medidas de segurança diferentes quando o sinalizador HTTPOnly é definido. Por exemplo, o Opera e o Safari não impedem que o javascript grave no cookie. No entanto, a leitura é sempre proibida na versão mais recente de todos os principais navegadores.

Mas o mais importante, por que você quer ler um HTTPOnlycookie? Se você for um desenvolvedor, apenas desative o sinalizador e certifique-se de testar seu código para xss. Eu recomendo que você evite desabilitar este sinalizador, se possível. O HTTPOnlysinalizador e o "sinalizador seguro" (que força o envio do cookie por https) sempre devem ser definidos.

Se você for um invasor , deseja sequestrar uma sessão . Mas existe uma maneira fácil de sequestrar uma sessão, apesar da HTTPOnlybandeira. Você ainda pode andar na sessão sem saber a id da sessão. O worm Samy do MySpace fez exatamente isso. Ele usou um XHR para ler um token CSRF e, em seguida, executar uma tarefa autorizada. Portanto, o invasor pode fazer quase tudo que o usuário conectado pode fazer.

As pessoas têm muita fé na HTTPOnlybandeira, o XSS ainda pode ser explorado. Você deve configurar barreiras em torno de recursos sensíveis. Por exemplo, o campo de alteração de senha deve exigir a senha atual. A capacidade de um administrador de criar uma nova conta deve exigir um captcha, que é uma técnica de prevenção de CSRF que não pode ser facilmente contornada com um XHR .

torre
fonte
Você poderia, por favor, falar mais sobre o worm? Esse link não funciona e realmente não entendia muito da internet também. Obrigado.
Abhishek Jebaraj
@Abhishek Jebaraj Se você não entende o worm sammy, ou tokens CSRF, tente primeiro entender os limites da política de mesma origem
rook
quero obter a data de validade de um cookie somente http, como faço isso
PirateApp
50

O ponto principal dos cookies HttpOnly é que eles não podem ser acessados ​​por JavaScript.

A única maneira (exceto para explorar bugs do navegador) para seu script lê-los é ter um script cooperativo no servidor que lerá o valor do cookie e o ecoará de volta como parte do conteúdo da resposta. Mas se você pode e deve fazer isso, por que usar cookies HttpOnly em primeiro lugar?

Ilmari Karonen
fonte
Você pode querer testá-lo para saber se o navegador do usuário lida corretamente com o HttpOnly para cookies antes de permitir que o usuário use o seu site a partir de um navegador específico. Estou procurando um exemplo que pode garantir o suporte do navegador da bandeira HttpOnly. MS também aconselha a fazê-lo, mas não há nenhum conselho adicional sobre como: Mitigar XSS com HttpOnly
Ursegor
Eu descobri que eles aconselham a lista branca da versão do navegador. Posso estar errado, mas não seria uma maneira conveniente de verificar o suporte do javascript? Você poderia sugerir algum drawbaks sobre isso?
Ursegor
-7

Uma das formas é usar o safari web inspector, e na aba de armazenamento você pode ver todos os cookies, httpOnly ou não, e apenas selecionar o cookie Command + C, para copiá-lo.

Depois de obter a string, você pode analisá-la facilmente de volta com qualquer analisador de cookies ou javascript simples.

insira a descrição da imagem aqui

Pankajdoharey
fonte
1
FF e Chrome também podem fazer isso. Eles não são a mesma coisa que o OP deseja.
imba-tjd
@ imba-tjd Bem, você está certo, mas eu estava usando o Safari na época, então posso garantir isso.
pankajdoharey
É como responder a alguém que pergunta "Como faço para obter a entrada do usuário" com, "Basta perguntar a eles e definir em seu código".
forumulator