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;
  }
});
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top