人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPのセッションについての質問です。検索エンジンのクローラーがアクセスした時に、URIにセッションIDが埋め込まれないようにしたいのですが、上手く行きません。
http://jp2.php.net/session_destroy のような手順でセッションとクッキーを削除したのですが、リクエストのたびに違うセッションIDが発行されてしまっているようです。(クローラーの判定・処理の分岐は上手く行ってるのでこれは原因ではありません。)
session.use_trans_sid は無効になってます。一部リンク先のURIにSIDを埋め込む処理がありましたが、こちらも無効にしたため、これが原因でもありません。)
どういう原因が考えられるかご教授下さい。

●質問者: hhashimo
●カテゴリ:ウェブ制作
✍キーワード:PHP sid URI アクセス クッキー
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ito-yu
●24ポイント

「セッションID付きのURLにクローラーがアクセスしてくる」という話ではないんですよね。であれば、クローラーだと判定したときはsession_start()しなければいいのではないですか?

あとは session.auto_start = 0、session.use_only_cookies = 1 あたりも設定してみてください。

◎質問者からの返答

そう思ってsession_start()をしないでsession_destroy()してたのですが、それでも変化がないし、どうも削除の時もsessyion_start()は必要のようなので残しています。

session_aouto_startは無効ですが、他の動作の都合でsession.use_only_cookiesは無効に出来ません。

session.auto_start = 0


2 ● ygs
●23ポイント

http://php.s3.to/man/ref.session.html

セッション処理関数(session)

session.use_only_cookiesを無効にしないと大変です。


1.Aさんが検索エンジンからアクセスしてログインする。

2.Bさんが同じ検索エンジンからアクセスすると、、AさんのMyPageが見れる!


ことになります。

Session fixationって言うらしいです。


検索エンジンを弾くか、

セッションまわりの自作しかないと思います。


ログインありページとログインなしページをわけるとか、

検索エンジン用のページを作るか、

して、ユーザが使うページから検索エンジンを締め出してください。


そうしないと個人情報が、、、

セッションをログインに使ってることを前提に書きましたが、

そうでなくても、そのままにするのはよくないですね。


Session fixationについて知っていて、

この質問を投げているんだったらごめんなさい。

http://www.acros.si/papers/session_fixation.pdf

◎質問者からの返答

回答ありがとうございます。session.use_only_cookiesを無効に、とありますが、有効に、の間違いじゃないですか?

いずれにしても、そういった問題が別途検討したいと思います。

なお、その後、クローラーがアクセスした時だけsession.gc_maxlifetime を0、gc(ガーベッジコネクション)プロセス の始動する確率を100%にすることで、ほとんどのアクセスに対してURLにセッションIDが埋め込まれることを回避できましたが、それでもまだ埋め込まれるケースがあります。

不思議なことに一旦埋め込まれなくなったIPアドレスが再び埋め込まれるようになったりしています。

register_globalsがonなので、その関係でセッション変数がグローバル化してるのなかな?などど思いsession_unregister()でグローバル変数のセッションとしての登録を解除したりもしてみましたが、まだ完全ではありません。

全く訳がわかりません。


3 ● ygs
●23ポイント

session.use_only_cookies、、、有効の間違いですね、、、


SIDがリンクに埋め込まれるかどうかは、クッキーがあるかないかで決まります。

ブラウザでクッキーを有効にしていても最初のリクエストでは、クッキーがないので、URIにSIDが入っているはずです。

もしかしたら、クローラーもクッキーを扱えるのかもしれません。


ガベージコレクションはそのSIDでアクセスしたときに値が保持されているかどうかにかかわってきます。

なので、URIにSIDが埋め込まれるかどうかには関係ありません。

つまり、URIにSIDは埋まってるけど、期限切れみたいな。


クローラーがアクセスしたときだけsession.use_only_cookiesを有効にできないですか?

このやりかただとクローラー判定ロジックにバグがあったらセキュリティホールになりますが、、、

session.use_only_cookiesを有効にできないなら、理由を教えていただくと解決のヒントになるかも。

◎質問者からの返答

クローラーがアクセスしたの時だけsession.use_only_cookiesを有効にしてみましたが、結果に変化がありません。それでもセッションIDが付くということはクローラーはクッキーを使っていて、かつ、そのクッキーが消えずに残ってるということでしょうか。session_start()はやはり無効にした方が良いです。それでもダメだったのは、session_registr()を無効にしていなかったからでは?とようやく気付きました。現在まだ調査中です。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ