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;
}
});
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!
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 permet d'Origin et également de définir l'en-tête HTTP Access-Control-Allow-Credentials sur true
Si votre demande sur le même domaine que le code jquery, vous pouvez utiliser jquery plugin cookies