web-dev-qa-db-ja.com

JavaScriptでXMLHttpRequestを使用してCookie(ヘッダー)を設定するにはどうすればよいですか?

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

これを行うことができます。 $ .ajax呼び出しには次のものが必要です。

xhrFields: {
    withCredentials: true
}

(jQueryのドキュメントを参照してください)。また、CORSをサポートするためにリクエストするサイトも必要になります(少なくともOriginを許可し、Access-Control-Allow-CredentialstrueへのHTTPヘッダー。

それが機能することは間違いありません。基本認証などを使用して、HTTPS経由でそれを行うことができます。jQueryは、(xhrFields)に指示すると、すべて(認証ヘッダー、Cookie)を送信し、サイトが正しいCORSヘッダーを提供します。あきらめてはいけません!

35
terrycojones

セキュリティ上の理由から、XMLHTTPRequest中にヘッダーを変更することはできません。

14
Gabriel McAdams

Document.cookieを使用してCookieを設定した場合、リクエストを送信すると、Cookieヘッダーに含まれます。

3
Patrick

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

originを許可し、Access-Control-Allow-Credentials HTTPヘッダーをtrueに設定することもできます

1
loocao

Jqueryコードと同じドメインでリクエストを行う場合、jquery cookies plugin を使用できます

0
antyrat