XMLHttpRequestを使用してXSS要求にCookieを設定しようとしています。
XMLHttpRequest Specification を見つけました。セクション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;
}
});
これを行うことができます。 $ .ajax呼び出しには次のものが必要です。
xhrFields: {
withCredentials: true
}
(jQueryのドキュメントを参照してください)。また、CORSをサポートするためにリクエストするサイトも必要になります(少なくともOriginを許可し、Access-Control-Allow-Credentials
true
へのHTTPヘッダー。
それが機能することは間違いありません。基本認証などを使用して、HTTPS経由でそれを行うことができます。jQueryは、(xhrFields)に指示すると、すべて(認証ヘッダー、Cookie)を送信し、サイトが正しいCORSヘッダーを提供します。あきらめてはいけません!
セキュリティ上の理由から、XMLHTTPRequest中にヘッダーを変更することはできません。
Document.cookieを使用してCookieを設定した場合、リクエストを送信すると、Cookieヘッダーに含まれます。
https://developer.mozilla.org/En/Server-Side_Access_Control
originを許可し、Access-Control-Allow-Credentials HTTPヘッダーをtrueに設定することもできます
Jqueryコードと同じドメインでリクエストを行う場合、jquery cookies plugin を使用できます