Como faço para definir um cookie (cabeçalho) com xmlHttPrequest em JavaScript?
-
22-09-2019 - |
Pergunta
Estou tentando definir um cookie em uma solicitação XSS usando o xmlHttPrequest.
Eu encontrei o Especificação xmlHttPrequest, E a Seção 4.6.2-5 parece sugerir que a configuração de cookies, cookie2 e alguns outros cabeçalhos não sejam permitidos, mas eu esperava que houvesse um trabalho por aí.
Meu código (jQuery) está abaixo, mas a consulta resultante falha, pois o cookie não está definido.
$.ajax( {
type : "POST",
url : URL,
data: SOAP_INBOX_MAIL_QUERY,
dataType : "xml",
async: false,
beforeSend : function(xhr) {
var cookie = credentials["COOKIE"];
console.info( "adding cookie: "+ cookie );
xhr.setRequestHeader('Cookie', cookie);
},
success : function(data, textStatus, xmLHttpRequest){
},
error : function(xhr, ajaxOptions, thrownError) {
credentials = null;
}
});
Solução
Isto pode ser feito. Você precisa do seguinte na chamada $ .ajax:
xhrFields: {
withCredentials: true
}
(Veja os documentos do jQuery) e você também precisará do site que você está fazendo o pedido para apoiar os CORs (eles pelo menos precisarão permitir a origem e também para definir o Access-Control-Allow-Credentials
Cabeçalho HTTP para true
).
Não há dúvida de que funciona. Você pode fazê -lo com https, com autenticação básica, etc. O jQuery enviará tudo (o cabeçalho de autenticação, cookies) se você disser isso para (xhrfields) e o site fornece os cabeçalhos CORS certos. Não desista!
Outras dicas
Por razões de segurança, você não poderá modificar o cabeçalho durante um XMLHTTPREQUEST.
Se você definir o cookie usando document.cookie, quando você enviar a solicitação, o cabeçalho do cookie o incluirá.
https://developer.mozilla.org/en/server-side_access_control
Permita sua origem e também definir o cabeçalho HTTP de acesso ao controle-control-credials HTTP
Se sua solicitação no mesmo domínio do código jQuery, você poderá usar o jQuery plugin de cookies