Cookieに基づくアクセス制限のあるサイトでAJAXを使用する場合、JavaScriptはCookieにアクセスする必要があります。HttpOnly CookieはAJAXサイトで機能しますか?
編集: Microsoftは、HttpOnlyが指定されている場合にCookieへのJavaScriptアクセスを禁止することにより、XSS攻撃を防ぐ方法を作成しました。FireFoxは後でこれを採用しました。だから私の質問は:StackOverflowのようなサイトでAJAXを使用している場合、Http-Onlycookiesはオプションですか?
編集2:質問2. HttpOnlyの目的がCookieへのJavaScriptアクセスを防ぐことであり、XmlHttpRequestオブジェクトを介してJavaScript経由でCookieを取得できる場合、HttpOnlyのポイントは何ですか?
編集3:ウィキペディアからの引用は次のとおりです。
ブラウザがそのようなCookieを受信すると、次のHTTP交換では通常どおりに使用することになっていますが、クライアント側のスクリプトには表示されません。[32] フラグは標準の
HttpOnly
一部ではなく、すべてのブラウザに実装されているわけではありません。現在、XMLHTTPRequestを介してセッションCookieを読み書きすることを妨げるものはないことに注意してください。[33]。
document.cookie
HttpOnlyを使用すると、それがブロックされることを理解しています。ただし、XMLHttpRequestオブジェクトでCookie値を読み取ることができるようで、XSSが可能です。HttpOnlyはどのようにあなたをより安全にしますか?クッキーを本質的に読み取り専用にすることによって?
あなたの例では、私はあなたに書き込むことはできませんがdocument.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のドメイン間の投稿はありません。
編集:この情報はおそらく最新ではありません。