Cookieに基づくアクセス制限があるサイトでAJAXが使用されている場合、JavaScriptはCookieにアクセスする必要があります。HttpOnly CookieはAJAXサイトで機能しますか?
編集:マイクロソフトは、HttpOnlyが指定されている場合にJavaScriptがCookieにアクセスできないようにすることで、XSS攻撃を防ぐ方法を作成しました。FireFoxは後でこれを採用しました。だから私の質問は:StackOverflowのようなサイトでAJAXを使用している場合、Http-Only Cookieはオプションですか?
編集2:質問2. HttpOnlyの目的がCookieへのJavaScriptアクセスを防ぐことであり、XmlHttpRequestオブジェクトを介してJavaScript経由でCookieを取得できる場合、HttpOnlyの目的は何ですか?
編集3:ウィキペディアからの引用です:
ブラウザがこのようなCookieを受信すると、次のHTTP交換では通常どおりにそれを使用することになっていますが、クライアント側のスクリプトからは見えないようになっています。[32] この
HttpOnly
フラグは標準の一部ではなく、すべてのブラウザーに実装されているわけではありません。現在、XMLHTTPRequestを介したセッションCookieの読み取りまたは書き込みは禁止されていないことに注意してください。[33]。
document.cookie
HttpOnlyを使用するとブロックされることを理解しています。しかし、XMLHttpRequestオブジェクトのCookie値を読み取ることができ、XSSを許可できるようです。HttpOnlyはどのようにしてあなたをより安全にしますか?Cookieを本質的に読み取り専用にすることによって?
あなたの例では、に書き込むことはできませんdocument.cookie
が、それでもCookieを盗み、XMLHttpRequestオブジェクトを使用してドメインに投稿することができます。
<script type="text/javascript">
var req = null;
try { req = new XMLHttpRequest(); } catch(e) {}
if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
req.open('GET', 'http://stackoverflow.com/', false);
req.send(null);
alert(req.getAllResponseHeaders());
</script>
編集4:申し訳ありませんが、XMLHttpRequestをStackOverflowドメインに送信してから、getAllResponseHeaders()の結果を文字列に保存し、Cookieを正規表現で出力して、それを外部ドメインに投稿できます。ウィキペディアとha.ckersはこれに関して私と同意しているようですが、私は再教育を受けたいと思います...
最終編集:ああ、明らかに両方のサイトが間違っています。これは実際にはFireFoxのバグですです。IE6と7は、実際には現在HttpOnlyを完全にサポートしている唯一のブラウザーです。
私が学んだすべてを繰り返すために:
- HttpOnlyはIE7およびFireFoxのdocument.cookieへのすべてのアクセスを制限します(他のブラウザーについては不明)
- HttpOnlyは、IE7のXMLHttpObject.getAllResponseHeaders()の応答ヘッダーからCookie情報を削除します。
- XMLHttpObjectsは送信元のドメインにのみ送信できるため、Cookieのクロスドメイン投稿はありません。
編集:この情報はおそらく最新ではありません。