O JavaScript precisa acessar os cookies se o AJAX for usado em um site com restrições de acesso baseadas em cookies. Os cookies HttpOnly funcionarão em um site AJAX?
Edit: A Microsoft criou uma maneira de impedir ataques XSS, proibindo o acesso do JavaScript aos cookies, se HttpOnly for especificado. Mais tarde, o FireFox adotou isso. Portanto, minha pergunta é: se você estiver usando o AJAX em um site, como o StackOverflow, os cookies somente HTTP são uma opção?
Edit 2: Question 2. Se o objetivo do HttpOnly é impedir o acesso do JavaScript aos cookies, e você ainda pode recuperá-los via JavaScript através do objeto XmlHttpRequest, qual é o objetivo do HttpOnly ?
Edit 3: Aqui está uma citação da Wikipedia:
Quando o navegador recebe um cookie, é suposto usá-lo normalmente nas trocas HTTP a seguir, mas não para torná-lo visível para os scripts do cliente. [32] O
HttpOnly
sinalizador não faz parte de nenhum padrão e não é implementado em todos os navegadores. Observe que atualmente não há prevenção de ler ou gravar o cookie da sessão por meio de um XMLHTTPRequest. [33]
Eu entendo que document.cookie
está bloqueado quando você usa o HttpOnly. Mas parece que você ainda pode ler os valores dos cookies no objeto XMLHttpRequest, permitindo o XSS. Como o HttpOnly o torna mais seguro que? Fazendo cookies essencialmente apenas para leitura?
No seu exemplo, não posso gravar no seu document.cookie
, mas ainda posso roubar o seu cookie e publicá-lo no meu domínio usando o objeto XMLHttpRequest.
<script type="text/javascript">
var req = null;
try { req = new XMLHttpRequest(); } catch(e) {}
if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
req.open('GET', 'http://stackoverflow.com/', false);
req.send(null);
alert(req.getAllResponseHeaders());
</script>
Edição 4: Desculpe, eu quis dizer que você poderia enviar o XMLHttpRequest para o domínio StackOverflow e salvar o resultado de getAllResponseHeaders () em uma string, regexar o cookie e publicá-lo em um domínio externo. Parece que a Wikipedia e os ha.ckers concordam comigo nesse caso, mas eu adoraria ser reeducado ...
Edição final: Ahh, aparentemente os dois sites estão errados, isso é realmente um bug no FireFox . O IE6 e o 7 são, na verdade, os únicos navegadores que atualmente oferecem suporte total ao HttpOnly.
Para reiterar tudo o que aprendi:
- O HttpOnly restringe todo o acesso ao document.cookie no IE7 e no FireFox (não tenho certeza sobre outros navegadores)
- HttpOnly remove as informações de cookies dos cabeçalhos de resposta em XMLHttpObject.getAllResponseHeaders () no IE7.
- O XMLHttpObjects pode ser enviado apenas ao domínio de origem, portanto, não há postagem entre os cookies.
editar: é provável que essas informações não estejam mais atualizadas.