2009-06-03 12 views
8

私の現在のドキュメントのURLはhttp://127.0.0.1/fooと私はHTTPのCookieの値に変更する必要があります://127.0.0.1/barを。 ドキュメントのURLがfooであるため、document.cookieは空です。 現時点では、私はクッキーの値を読み取るだけです。 手掛かりはありますか?は別のパスからクッキーを取得

答えて

16

クッキーを作成するときに、パスを 'foo'の代わりに '/'に設定すると、 '/ foo'、 '/ bar'などのドメインのどこでも読み取ることができます。

+0

ところで、このリンクが役に立つかもしれ:http://www.quirksmode.org/js/cookies.html –

+0

私はクッキーの作成とパスを変更することはできません。だから、fooからバーのクッキーにアクセスすることは不可能ですか? –

+0

クッキーは本当に保護されていないので、大きなセキュリティ上の問題はありません。 SOPがパスを無視するため、Cookieパスは意味のあるセキュリティ障壁ではありません。 – Antimony

2

別のパスからクッキーにアクセスすることはできません。そうしないと、セキュリティホールになります。

私は考えることができる唯一の方法は、/barはそのpath=//foo含む)/内のすべてのページがアクセスできるようにクッキーを設定することです。 JJとgrawityとして

3

は、あなたのページからこれを行うことができます方法はありません述べました。しかし、あなたは回避策があります。

i。 http://localhost/barを指すiframeを配置します。クッキーの値を保存する「バー」ページに隠された要素があります。 (このiframeを1 * 1サイズにすると表示されません)。

ii。 「foo」ページでJavaScriptを使用して、Cookie値を取得します。

(修正を含む)同様のアプローチがあまりにもクッキーの値を書き込むために使用することができます!

ありがとう、

Ramjee

+0

これは、インターネット上の誰もがCookieを取得できないでしょうか? – Antimony

12

あなたはを作成することができますが、それに/bar内部のリソースを指差し、クロスフレームスクリプト。例えば:

<iframe src="/bar/blank.html" id="barframe"></iframe> 

var barframe= document.getElementByIf('barframe'); 
var bardocument= 'contentDocument' in barframe? barframe.contentDocument : barframe.contentWindow.document; // IE compat 
alert(bardocument.cookie); 

クッキーpath=偶発クッキーの名前の衝突を防止するための便利な尺度です。異なるパスがJavaScriptの起源を共有することを考えると、それは効果的なセキュリティメカニズムではありません。

+3

+1は、クッキーのパスが意味のあるセキュリティ壁ではないことを指摘しています。 – Antimony

+1

パスはセキュリティ機能ではなく、パフォーマンスの機能です。 "barframe.contentDocument"の部分が欠けていました。どうもありがとう。私の+1。 –

関連する問題