Как установить cookie (заголовок) с помощью XMLHttpRequest в JavaScript?
Я пытаюсь установить Cookie в запросе XSS с использованием XMLHttpRequest.
Я нашел Спецификацию XMLHttpRequest, и в разделе 4.6.2-5 показано, что настройка Cookie, Cookie2 и некоторых других заголовков не разрешены, но я надеялся, что там будет работа.
Мой (jQuery) код приведен ниже, но результирующий запрос завершается с ошибкой, так как cookie НЕ установлен.
$.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;
}
});
Ответы
Ответ 1
Это можно сделать. В вызове $.ajax вам понадобится следующее:
xhrFields: {
withCredentials: true
}
(см. документы jQuery), и вам также понадобится сайт, на который вы делаете запрос, для поддержки CORS (они, по крайней мере, должны будут разрешить вам происхождение, а также установить заголовок HTTP Access-Control-Allow-Credentials
на true
).
Нет сомнений, что это работает. Вы можете сделать это через HTTPS, с Basic Auth и т.д. JQuery отправит все (заголовок auth, cookie), если вы сообщите об этом (xhrFields), и сайт предоставит правильные заголовки CORS. Не сдавайтесь!
Ответ 2
По соображениям безопасности вы не сможете изменить заголовок во время XMLHTTPRequest.
Ответ 3
Если вы установите cookie с помощью document.cookie, то при отправке запроса заголовок файла cookie будет включать его.
Ответ 4
https://developer.mozilla.org/En/Server-Side_Access_Control
разрешить вам происхождение, а также настроить HTTP-заголовок Access-Control-Allow-Credentials на true
Ответ 5
Если ваш запрос в том же домене, что и код jquery, вы можете использовать jquery cookie cookie