ローカルサーバの発行したCookieについて

7,177 views
Skip to first unread message

Nori

unread,
Mar 21, 2010, 11:10:43 PM3/21/10
to Chromium-Extensions-Japan
こんにちは

以下のサイトに、ローカルサーバの発行したCookieがChromeではdocument.cookieで取れないと有ります。
http://onefourhack.seesaa.net/article/114059111.html

ローカルサーバとは、ブラウザと同一マシン上のサーバという事で良いと思いますが、
実際に試してみると、デバッグコンソールのStorageにCookieが表示されるにも関わらず、確かにdocument.cookieの値は””で
した。

hosts を書き換えてみたり、localhostという名前以外でアクセスすることも試してみましたが、やはりcookieが取れませんでした。
これは、Chrome の仕様なのでしょうか、bugなのでしょうか。

Webサービスと協調するChrome extensionを作っているのですが、ローカルで作業できないとかなり手間になりそうなので、
何か良い方法をご存知でしたら、教えていただけたらと思います。

よろしくお願いします。

Ohta Shogo

unread,
Mar 22, 2010, 1:12:23 AM3/22/10
to Chromium-Extensions-Japan
こんにちは、太田です

> 以下のサイトに、ローカルサーバの発行したCookieがChromeではdocument.cookieで取れないと有ります。
これは、ローカル*サーバー*ではなく、ローカルファイルのことだと思われます。
実際にfile:///で始まるURLの場合、Cookieは扱えません。

ローカルサーバー( http://localhost/ など)であれば、Cookieを扱えるはずです。
私の方で試した限りでは、http://localhost/ でCookieの保存、参照はできました。
もしかしたら、pathやexpireあたりに問題があるのかもしれません。

HAMAMOTO Nori

unread,
Mar 22, 2010, 7:01:11 AM3/22/10
to chromium-ext...@googlegroups.com
太田さん

お返事ありがとうございます。

私の方は、こんな感じです。

localhost:3000 にRails でサーバを立ち上げて、そこでsessionようにCookieを発行しています。
このCookieをcontent scriptで拾って popupから送信するxhr用のCookieに使い回したかったのですが、content script でこれを取得できなかったという状況です。

何が原因かわかりますでしょうか?
Nori

2010年3月22日2:12 Ohta Shogo <os0...@gmail.com>:
--
このメールは Google グループのグループ「Chromium-Extensions-Japan」の登録者に送られています。
このグループに投稿するには、chromium-ext...@googlegroups.com にメールを送信してください。
このグループから退会するには、chromium-extension...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/chromium-extensions-japan?hl=ja からこのグループにアクセスしてください。


Ohta Shogo

unread,
Mar 22, 2010, 9:09:52 AM3/22/10
to Chromium-Extensions-Japan
こんにちは。

> localhost:3000 にRails でサーバを立ち上げて、そこでsessionようにCookieを発行しています。

なるほど、port部分が怪しそうですね。

一応、私の方でもなるべく環境を揃えて試してみましたが、こちらではやはりcookieを参照できているようです。
http://ss-o.net/img/mac_beta_cookie.png
ただ、サーバーからセットしたCookieではなく、JavaScriptでセットしたCookieなのでまた事情が違うのかもしれません。
# 見たところMacのbeta版のようなので、同じバージョンでテストしてみました

役に立つ情報かわかりませんが、とりあえずご報告まで。

On 3月22日, 午後8:01, HAMAMOTO Nori <norisu...@gmail.com> wrote:
> 太田さん
>
> お返事ありがとうございます。
>
> 私の方は、こんな感じです。http://img.skitch.com/20100322-g31gsjqxdutekf5a7e3dy2hbr3.png
>
> localhost:3000 にRails でサーバを立ち上げて、そこでsessionようにCookieを発行しています。
> このCookieをcontent scriptで拾って popupから送信するxhr用のCookieに使い回したかったのですが、content
> script でこれを取得できなかったという状況です。
>
> 何が原因かわかりますでしょうか?
> Nori
>
> 2010年3月22日2:12 Ohta Shogo <os0...@gmail.com>:
>
>
>
> > こんにちは、太田です
>
> > > 以下のサイトに、ローカルサーバの発行したCookieがChromeではdocument.cookieで取れないと有ります。
> > これは、ローカル*サーバー*ではなく、ローカルファイルのことだと思われます。
> > 実際にfile:///で始まるURLの場合、Cookieは扱えません。
>
> > ローカルサーバー(http://localhost/など)であれば、Cookieを扱えるはずです。

> > 私の方で試した限りでは、http://localhost/でCookieの保存、参照はできました。


> > もしかしたら、pathやexpireあたりに問題があるのかもしれません。
>
> > On 3月22日, 午後12:10, Nori <norisu...@gmail.com> wrote:
> > > こんにちは
>
> > > 以下のサイトに、ローカルサーバの発行したCookieがChromeではdocument.cookieで取れないと有ります。
> >http://onefourhack.seesaa.net/article/114059111.html
>
> > > ローカルサーバとは、ブラウザと同一マシン上のサーバという事で良いと思いますが、
> > > 実際に試してみると、デバッグコンソールのStorageにCookieが表示されるにも関わらず、確かにdocument.cookieの値は””で
> > > した。
>
> > > hosts を書き換えてみたり、localhostという名前以外でアクセスすることも試してみましたが、やはりcookieが取れませんでした。
> > > これは、Chrome の仕様なのでしょうか、bugなのでしょうか。
>
> > > Webサービスと協調するChrome extensionを作っているのですが、ローカルで作業できないとかなり手間になりそうなので、
> > > 何か良い方法をご存知でしたら、教えていただけたらと思います。
>
> > > よろしくお願いします。
>
> > --
> > このメールは Google グループのグループ「Chromium-Extensions-Japan」の登録者に送られています。
> > このグループに投稿するには、chromium-ext...@googlegroups.com にメールを送信してください。

> > このグループから退会するには、chromium-extension...@googlegroups.com<chrom ium-extensions-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/chromium-extensions-japan?hl=jaからこのグループにアクセスしてください。

HAMAMOTO Nori

unread,
Mar 22, 2010, 9:21:42 AM3/22/10
to chromium-ext...@googlegroups.com
ご返信ありがとうございます。

何が問題に鳴っているんでしょうね。
ローカルサーバもWebサーバには違いないでしょうに。

本家のメーリングリストの方にも質問してみました。
何かわかったら、この場で報告したいと思います。

Nori

p.s.
私のChrome環境です。



2010年3月22日10:09 Ohta Shogo <os0...@gmail.com>:

HAMAMOTO Nori

unread,
Mar 22, 2010, 8:26:21 PM3/22/10
to chromium-ext...@googlegroups.com
原因わかりました。
サーバがローカルに有るか、リモートに有るかは関係有りませんでした。

Cookie にはhttponly属性というのが有って、これをonにすることで、javascript からアクセスできないcookieを作成することができるとのことで、これが原因でした。

太田さんのスクリーンショットと私のスクリーンショットを見比べてもらうとわかるのですが、
Cookie一覧表の右のほうにHTTP属性というのが有るのが確認できると思います。
これが、そのhttponly属性です。


私の方のcookieには、このチェックボックスがonになっているので、値が取れないという状況でした。

popup から、私の自作のWebサービスにアクセスしたいというのがそもそも実現したいことです。
セキュリティー的に一抹の不安は有りますが、この属性をoffにしてsessionを作成し、content script でcookie値を取得後backgroundプロセスへ送って、popupからそのcookie値付きでxhrでサービスにアクセスするという方法で実現してみたいと思います。(他にいい案があれば教えて下さい。)

以上、ありがとうございました。
Nori

2010年3月22日10:21 HAMAMOTO Nori <nori...@gmail.com>:

Ohta Shogo

unread,
Mar 23, 2010, 8:50:18 AM3/23/10
to Chromium-Extensions-Japan
> Cookie にはhttponly属性というのが有って、これをonにすることで、javascript
> からアクセスできないcookieを作成することができるとのことで、これが原因でした。
なるほど!
httponly属性とは…すっかり忘れてました。
IE Onlyなイメージがありますが、最近では主要ブラウザはみな対応してるみたいですね。

XSS対策の1つとして有効ではあるので、Railsの実装も理にかなってはいますね。

> popup から、私の自作のWebサービスにアクセスしたいというのがそもそも実現したいことです。
この目的であれば、単純にインラインフレームを使用するというのも有効かもしれません。
iframeで読み込むためのページを用意して置き、そこでContent Scriptsを使用すれば、
Cookieを気にする必要もありませんし、セキュリティ的にも安全だと思います。


On 3月23日, 午前9:26, HAMAMOTO Nori <norisu...@gmail.com> wrote:
> 原因わかりました。
> サーバがローカルに有るか、リモートに有るかは関係有りませんでした。
>
> Cookie にはhttponly属性というのが有って、これをonにすることで、javascript
> からアクセスできないcookieを作成することができるとのことで、これが原因でした。
>
> 太田さんのスクリーンショットと私のスクリーンショットを見比べてもらうとわかるのですが、
> Cookie一覧表の右のほうにHTTP属性というのが有るのが確認できると思います。
> これが、そのhttponly属性です。
>
> > 太田さんの:http://ss-o.net/img/mac_beta_cookie.png
> > 私の:http://img.skitch.com/20100322-g31gsjqxdutekf5a7e3dy2hbr3.png
>
> 私の方のcookieには、このチェックボックスがonになっているので、値が取れないという状況でした。
>
> popup から、私の自作のWebサービスにアクセスしたいというのがそもそも実現したいことです。
> セキュリティー的に一抹の不安は有りますが、この属性をoffにしてsessionを作成し、content script

> でcookie値を取得後backgroundプロセスへ送って、popupからそのcookie値付きでxhrでサービスにアクセスするという方法で実現して みたいと思います。(他にいい案があれば教えて下さい。)
>
> 以上、ありがとうございました。
> Nori
>
> 2010年3月22日10:21 HAMAMOTO Nori <norisu...@gmail.com>:

> >> > > このグループから退会するには、chromium-extension...@googlegroups.com<chrom ium-extensions-japan%2Bunsu...@googlegroups.com><chrom
> >> ium-extensions-japan%2Bunsu...@googlegroups.com<ium-extensions-japan%25 2Bunsu...@googlegroups.com>


> >> >にメールを送信してください。
> >> > > 詳細については、
> >>http://groups.google.com/group/chromium-extensions-japan?hl=ja
> >> からこのグループにアクセスしてください。
>

HAMAMOTO Nori

unread,
Mar 23, 2010, 9:48:04 AM3/23/10
to chromium-ext...@googlegroups.com
太田さん
お返事ありがとうございます。

>> popup から、私の自作のWebサービスにアクセスしたいというのがそもそも実現したいことです。
> この目的であれば、単純にインラインフレームを使用するというのも有効かもしれません。
> iframeで読み込むためのページを用意して置き、そこでContent Scriptsを使用すれば、
> Cookieを気にする必要もありませんし、セキュリティ的にも安全だと思います。

ということですが、popupの中にインラインフレームを用意して、その中で私のWebサービスを表示させるということでしょうか?
確かに、それができれば全部解決するような気がします。

ありがとうございます。
Nori


2010年3月23日9:50 Ohta Shogo <os0...@gmail.com>:
このグループから退会するには、chromium-extension...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/chromium-extensions-japan?hl=ja からこのグループにアクセスしてください。


HAMAMOTO Nori

unread,
Mar 23, 2010, 4:35:16 PM3/23/10
to chromium-ext...@googlegroups.com
太田さん

>> popup から、私の自作のWebサービスにアクセスしたいというのがそもそも実現したいことです。

これですが、よくよく考えてみると、content script で cookie を取得して、background プロセスへ送って、
popup から、この cookie を付加したxhrを送信して実現、みたいな手の込んだ事は全く必要ないことに気がつきました。
こんな事全くしなくても、同一ドメインで提供されているサービスにアクセスする際には、ブラウザからアクセスしようと、
popupで実行されるxhrからアクセスしようとcookieは勝手に付加されます。

当たり前ですね。 それが cookie ですから。

Webサービスを表示しているタブのdevelopper tool 内のクッキーリストに、そのサービスのCookieが表示されていて、
popup をタブで表示したタブのdevelopper tools 内のクッキーリストにそれが無いと、popupからはそのcookieにアクセス
出来ないと思うじゃないですか!!
全然勘違いしていましたね。
local storage のリストと、cookie のリストでは、その意味がまるで違う事に気がつきました。

local storage のリストは、そのタブ内(同一ドメイン内)からアクセスできるstorage に格納された値のリスト。
cookie のリストは表示されているドメインから送られてきたcookieリストです。

なので、みなさん私と同じ間違いをしないようにお気をつけ下さいませ。


それから、もうひとつ気がついたのが、developer tool の Resource に表示されるhttpの取得リストですが、
これのヘッダにはCookieが含まれていないようですね。

同じサイトにFirefoxでアクセスして、Firebug ではCookieが表示されるのが、developer tool  の方だと表示されていませんでした。
これはどうしてなんでしょう。


というわけで、長くなりましたが、これが事の顛末です。

ではでは
Nori


2010年3月23日10:48 HAMAMOTO Nori <nori...@gmail.com>:

Ohta Shogo

unread,
Mar 23, 2010, 5:32:36 PM3/23/10
to Chromium-Extensions-Japan
な、なるほどー。
私も勘違いしていました。
まず、拡張コンテキストからXMLHttpRequestなどでリクエストを投げた場合は、Cookieが付かないと思っていました。
が、これはCookieではなくリファラでした。
そして、おっしゃる通りDeveloper ToolsのResourcesでリクエストヘッダを見るとCookieがないのは嵌りますね…。
Safariも同様なので、少なくともChrome限定のバグではないようです。

ただ、一点注意しなければいけないのが、ユーザーの設定次第ではCookieが送られないケースがあることです。
オプションの高度な設定→コンテンツの設定→Cookieに、すべてのサードパーティのCookieをブロックするという項目があります。
デフォルトではチェックされていませんが、最近ではクリックジャッキング対策などでチェックすることが推奨されている項目なので、Cookieが送られ
ないことも想定しておくと良いと思います。
といっても、どう対策したものかといった感じですが。。サードパーティのCookieをブロックしているとこのサービスは利用できません的なメッセージ
も仕方ないかなとは思います。


On 3月24日, 午前5:35, HAMAMOTO Nori <norisu...@gmail.com> wrote:
> 太田さん
>

> >> popup から、私の自作のWebサービスにアクセスしたいというのがそもそも実現したいことです。
>
> これですが、よくよく考えてみると、content script で cookie を取得して、background プロセスへ送って、
> popup から、この cookie を付加したxhrを送信して実現、みたいな手の込んだ事は全く必要ないことに気がつきました。
> こんな事全くしなくても、同一ドメインで提供されているサービスにアクセスする際には、ブラウザからアクセスしようと、
> popupで実行されるxhrからアクセスしようとcookieは勝手に付加されます。
>
> 当たり前ですね。 それが cookie ですから。
>
> Webサービスを表示しているタブのdevelopper tool 内のクッキーリストに、そのサービスのCookieが表示されていて、
> popup をタブで表示したタブのdevelopper tools 内のクッキーリストにそれが無いと、popupからはそのcookieにアクセス
> 出来ないと思うじゃないですか!!
> 全然勘違いしていましたね。
> local storage のリストと、cookie のリストでは、その意味がまるで違う事に気がつきました。
>
> local storage のリストは、そのタブ内(同一ドメイン内)からアクセスできるstorage に格納された値のリスト。
> cookie のリストは表示されているドメインから送られてきたcookieリストです。
>
> なので、みなさん私と同じ間違いをしないようにお気をつけ下さいませ。
>
> それから、もうひとつ気がついたのが、developer tool の Resource に表示されるhttpの取得リストですが、
> これのヘッダにはCookieが含まれていないようですね。
>
> 同じサイトにFirefoxでアクセスして、Firebug ではCookieが表示されるのが、developer tool
> の方だと表示されていませんでした。
> これはどうしてなんでしょう。
>
> というわけで、長くなりましたが、これが事の顛末です。
>
> ではでは
> Nori
>

> 2010年3月23日10:48 HAMAMOTO Nori <norisu...@gmail.com>:

> ...
>
> もっと読む ≫

HAMAMOTO Nori

unread,
Mar 24, 2010, 4:41:58 AM3/24/10
to chromium-ext...@googlegroups.com
太田さん

Cookieが表示されないのは、Safariでも同様なんですね。
WebKitの仕様かな。
なんでそうしているのかはよくわかりませんね。

後、サードパーティCookieをブロックといお話ですが、
私の作ったWebサービスから投げられたCookieを、xhrを使って同じWebサービスにアクセするので、
サードパーティCookieにはならずに済むかと思います。

知りたかったことがだいたい一通りすっきりわかるようになって、私のプロジェクトも進みそうです。
ありがとうございました。

Nori

2010年3月23日18:32 Ohta Shogo <os0...@gmail.com>:

--

Yuta Kitamura

unread,
Mar 24, 2010, 5:03:21 AM3/24/10
to chromium-ext...@googlegroups.com
太田さん、Noriさん、

こんにちは、Googleの北村です。

2010/3/24 HAMAMOTO Nori <nori...@gmail.com>

太田さん

Cookieが表示されないのは、Safariでも同様なんですね。
WebKitの仕様かな。
なんでそうしているのかはよくわかりませんね。


実際に送信されているヘッダが Web Inspector の画面で表示されないのであれば、おそらくWebKitのバグです。問題が再現できる小さなテストケースと一緒に http://webkit.org/new-inspector-bug からバグを登録していただけると助かります。

もし英語でバグレポートを書くのが難しければ、日本語で構いませんので私までバグレポートをメールで送っていただけますか。こちらで翻訳してバグを登録させていただきます。

お手数をおかけしますが、よろしくお願いします。

Ohta Shogo

unread,
Mar 24, 2010, 5:43:22 AM3/24/10
to Chromium-Extensions-Japan
太田です。

>Noriさん
サードパーティのCookieをブロックというのは、
現在表示しているドメインのCookie以外を送出しないという設定です。
PopupやBackground pageでは、ドメインがその拡張のIDになっていますので、
サードパーティのCookieをブロックしている状態では、
PopupからのクロスドメインリクエストでCookieを送出しないはずです。
と、言いつつまだ検証したことがないので、本当にそうなのか自信がありません。
# Firefoxではそういう挙動でした
あとで試してみようと思います。

>北村さん
WebKit Bugzillaにはかなり前から登録されていました。
https://bugs.webkit.org/show_bug.cgi?id=16531
うーん、Appleの方は乗り気でないみたいですね…。

On 3月24日, 午後6:03, Yuta Kitamura <yu...@chromium.org> wrote:
> 太田さん、Noriさん、
>
> こんにちは、Googleの北村です。
>

> 2010/3/24 HAMAMOTO Nori <norisu...@gmail.com>


>
> > 太田さん
>
> > Cookieが表示されないのは、Safariでも同様なんですね。
> > WebKitの仕様かな。
> > なんでそうしているのかはよくわかりませんね。
>
> 実際に送信されているヘッダが Web Inspector

> の画面で表示されないのであれば、おそらくWebKitのバグです。問題が再現できる小さなテストケースと一緒にhttp://webkit.org/new-inspector-bugからバグを登録していただけると助かります。
>
> もし英語でバグレポートを書くのが難しければ、日本語で構いませんので私までバグレポートをメールで送っていただけますか。こちらで翻訳してバグを登録させてい ただきます。

> ...
>
> もっと読む ≫

HAMAMOTO Nori

unread,
Mar 24, 2010, 5:51:23 AM3/24/10
to chromium-ext...@googlegroups.com
太田さん

今、サードパーティCookieの設定を見てみたのですが、全てのサードパーティCookieをブロックするにチェックが入っていました。
これで今まで開発/検証してきたのですが、問題なく動作しています。
なので、popupのxhr からCookie付きでリクエストが送信されているようです。
どうしてそういう挙動なのかはわからないのですが。

参考まで
Nori



2010年3月24日6:43 Ohta Shogo <os0...@gmail.com>:
> ...
>
> もっと読む ≫

Reply all
Reply to author
Forward
0 new messages