web-dev-qa-db-fra.com

Comment définir un cookie (en-tête) avec XMLHttpRequest en JavaScript?

J'essaie de définir un cookie dans une demande XSS à l'aide de XMLHttpRequest.

J'ai trouvé la XMLHttpRequest Specification , et la section 4.6.2-5 semble suggérer que la configuration de Cookie, Cookie2 et d'autres en-têtes ne sont pas autorisés, mais j'espérais qu'il y avait un travail autour.

Mon code (jQuery) est ci-dessous, mais la requête résultante échoue car le cookie n'est PAS défini.

$.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;
  }
});
28
barryred

Ceci peut être fait. Vous avez besoin des éléments suivants dans l'appel $ .ajax:

xhrFields: {
    withCredentials: true
}

(Voir les documents jQuery), et vous aurez également besoin du site auquel vous faites la demande pour prendre en charge CORS (ils devront au moins vous autoriser Origin et également définir le Access-Control-Allow-Credentials En-tête HTTP vers true).

Il ne fait aucun doute que cela fonctionne. Vous pouvez le faire via HTTPS, avec Basic Auth, etc. jQuery enverra tout (l'en-tête d'authentification, les cookies) si vous le dites à (xhrFields) et le site fournit les bons en-têtes CORS. N'abandonnez pas!

35
terrycojones

Pour des raisons de sécurité, vous ne pourrez pas modifier l'en-tête lors d'une requête XMLHTTPRequest.

14
Gabriel McAdams

Si vous définissez le cookie à l'aide de document.cookie, lorsque vous envoyez la demande, l'en-tête du cookie l'inclura.

3
Patrick

https://developer.mozilla.org/En/Server-Side_Access_Control

vous permet d'Origin et également de définir l'en-tête HTTP Access-Control-Allow-Credentials sur true

1
loocao

Si votre demande sur le même domaine que le code jquery, vous pouvez utiliser jquery plugin cookies

0
antyrat