Comment puis-je configurer un cookie (en-tête) avec XMLHttpRequest en JavaScript?

J'essaie de définir un cookie dans une requête XSS en utilisant XMLHttpRequest.

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

Mon code (jQuery) est ci-dessous, mais la requête résultante échoue lorsque 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; } }); 

Cela peut être fait. Vous avez besoin de ce qui suit dans l'appel $ .ajax:

 xhrFields: { withCredentials: true } 

(Voir les documents jQuery), et vous aurez également besoin du site que vous faites la demande pour prendre en charge CORS (ils devront au moins vous autoriser l'origine et définir également l'en Access-Control-Allow-Credentials tête HTTP Access-Control-Allow-Credentials 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 auth, les cookies) si vous le dites (xhrFields) et le site fournit les bons en-têtes CORS. N'abandonnez pas!

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

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

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

Vous permettent d'origine et aussi de définir l'en-tête HTTP Access-Control-Allow-Credentials true

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