スレッド表示 | フラット表示〕 全トピック 920 件中 792 番目 次≫ ≪前

session.cache_limiterが利かない

created: 2003-09-25 23:55 | modified: 2003-09-27 15:59 | reply: 9

[703] session.cache_limiterが利かない

user: けんじ | created: 2003-09-25 23:55
sessionを利用していて、ブラウザの戻るボタンで戻ると有効期限が切れたという表示がいやだったので、php.iniのsession.cache_limiterの値をpublicにしました。
すると見事に戻るボタンで戻っても大丈夫になったのですが、そのごセキュリティのことを考え、値をnocacheに戻したのですが、難なく戻ってしまいます。
phpinfo()の情報を見ると値はnocacheになっており、正常に見えます。
これはどういうことなのでしょう。

お手数ですが、お解りになりましたらご教授いただけませんでしょうか。

環境:
OS:RedHat Linux 9.0
Apache 2.0.40
PHP 4.3.3
reply: 704 返信 編集 削除

[704] ブラウザのキャッシュ一掃

user: ゆうじ | created: 2003-09-26 01:05
こんばんは。

この機能使ったこと無いので推測ですが
すでにキャッシュされたものが
表示されているのではないかと思いますが。

一度、ブラウザのキャッシュを
すべて削除してから行なうとどうでしょう。
Parent: 703  reply: 705 返信 編集 削除

[705] 考えられるものは掃除しました

user: けんじ | created: 2003-09-26 01:22
その可能性もあると思い、自分が考えられるものは削除してみました。
●ブラウザキャッシュ
●一時ファイル
●ブラウザ履歴
●クッキーファイル

以上やってみましたが、動作は同じでした。
そもそも、このオプション自体がキャッシュを無効にする(あるいは無視する)ものだと思っています。違ったら指摘してください。
気になるのは、以前と動作が違うことです。
Parent: 704  reply: 706 返信 編集 削除

[706] 再起動?

user: ゆうじ | created: 2003-09-26 01:38
キャッシュを削除してもだめでしたか。

マニュアルによるとこのオプションは
「キャッシュ制御用のHTTPヘッダを制御する」とありますので、
htmlソースに
<meta http-equiv="pragma" content="no-cache">
と書いたのと同じ働きをするのだと思います。

php.ini を 編集されたようですが
Apacheの 再起動 はされてますよね。

> 気になるのは、以前と動作が違うことです。
どのように違うのかおしえて下さい。
こちらでも検証してみます。
Parent: 705  reply: 707 返信 編集 削除

[707] 再起動もしました

user: けんじ | created: 2003-09-26 02:02
早速の返信ありがとうございます。
apacheはもちろんOSの再起動もクライアントマシンの再起動も行ってみました。

以前と違う点は、最初に書いたとおり、session_start()によってセッションを開始したページにブラウザの戻るボタンを押したときにいぜんは「ページの有効期限切れ」と表示されたのですが、それが出なくなってしまいました。つまり、publicのままの動作に見えるのです。

戻るボタンを押したときのパターンは以下の通りです。
●session_start()の記述があるページからsession_start()の記述があるページに戻った。
●通常のPHPのページからsession_start()の記述があるページに戻った。
●session_start()のあるページから通常のPHPのページに戻った(このパターンはnocacheが利いていてもページが表示されると推察されますが…)

上記の上から二つのパターについてはさらにその前のページがsession_start()のあるなしの計5パターンすべてで「有効期限切れ」の表示が出ませんでした。

以上が詳細な動作報告です。
お手数ですが、よろしくお願いします。
Parent: 706  reply: 710 返信 編集 削除

[710] 再現せず。

user: ゆうじ | created: 2003-09-26 12:50
只今、
WinXP + Apache1.3.28 + PHP4.3.3 という環境で、
2つのスクリプト間をPOSTメゾッドで移動を繰り返す
以下のようなスクリプトで確かめてみました。
テストしたブラウザはIE6です。

test1.php
<?php
session_start();
if(!isset($_SESSION['test']))
$_SESSION['test']="-- TESTSTRINGS --";
?>
<html>
<head>
</head>
<body>
<h3>TEST_1</h3>
<p><?php echo $_SESSION['test']; ?></p>
<hr>
<form method=post action=test2.php>
<input type=submit value=test2>
</form>
</body>
</html>

test2.php
<?php
session_start();
?>
<html>
<head>
</head>
<body>
<h3>TEST_2</h3>
<p><?php echo $_SESSION['test']; ?></p>
<hr>
<form method=post action=test1.php>
<input type=submit value=test1>
</form>
</body>
</html>

session.cache_limiterの値を、
(1)nocache(初期値)
(2)public に変更
(3)nocache に変更
と変更してそれぞれの場合についてページ移動後、戻るボタンで
有効期限切れ表示が出るか確かめました。

結論は、nocache の設定が反映され、(1)と(3)では
有効期限切れが表示され、おっしゃるような現象を再現できませんでした。残念。


ちと気づいたのですが、
このテストの際 test1.php と test2.php の ページ移動
(test1.php → test2.php → test1.php → test2.php)
を繰り返しましたが、一番初めにアクセスした test1.php だけは、
session.cache_limiter の値に関わらず必ずキャッシュされました。

テストされてるスクリプトがわかりませんので無関係なのかもしれませんが、
この初めのページに戻る部分だけを確認しているということはありませんよね。
くどいようですが念のため確認です。

こちらでも、もう少し調べたいと思います。
Parent: 707  reply: 712 返信 編集 削除

[712] 解決しました!

user: けんじ | created: 2003-09-26 15:28
大変お手数お掛けして申し訳ありません。
ゆうじさんのスクリプトで試したところ有効期限切れが表示されました。

そこで、判明しました。
私が無知なだけなのかもしれませんが、SessionID(SID)をGETメソッドで引き渡した場合には、キャッシュが保存されるということみたいです。
session.cache_limiterで検索してもそのようなことは見つけられなかったので、POSTでもGETでも聞くものかと思っていました。

私の場合session.cache_limiterの値を変化させるときに
(1)SIDをPOSTで引き渡していた。
(2)session.cache_limiterをpublicにした
(3)SIDの引渡しをGETにプログラムを変更した
(4)session.cache_limiterをnocacheにした

以上の操作からsession.cache_limiterが利かなくなったと勘違いしてしまったようです。
大変お騒がせして、申し訳ありません。

ゆうじさんの実験で最初のtest1.phpがキャッシュされてしまうことも、GETメソッドと同様と考えれば納得いきますね。

本当に大変お騒がせしました。申し訳ありません。私自身が、そこに気付くべきでした。
Parent: 710  reply: 714 返信 編集 削除

[714] GETがキャッシュされるとは

user: ゆうじ | created: 2003-09-27 02:45
私も知りませんでした。(笑)

とても丁寧にご報告をいただき
私のほうこそ勉強させていただきました。
ありがとうございます。
Parent: 712  reply: 715 返信 編集 削除

[715] セキュリティの低下

user: けんじ | created: 2003-09-27 14:17
ゆうじさんにそう言っていただけると自分の落ち度も少し気が楽になります。

さて、
<a href=hogehoge.php?<SID>>hogehoge</a>
のようなGETでのSIDの引渡しの場合session.cache_limiterの値が何であろうとキャッシュしてしまうということは、セッションのセキュリティが低下するということですよね。

ということは、phpによるSIDの発行の際にはそういった意味でもGETは推奨できないということになりますね。

ゆうじさんありがとうございました。
Parent: 714  reply: 716 返信 編集 削除

[716] あまり変わらないかも

user: ゆうじ | created: 2003-09-27 15:59
もしかして余計なおせっかいかも。
また私の認識違いだったらご指摘下さい。

> <a href=hogehoge.php?<SID>>hogehoge</a>

このようにGET で SID を明示してSIDを引き渡した場合と、
明示せずに Cookie経由(デフォルト)でSIDを引き渡した場合とでは、
ブラウザのアドレス欄に見えるか見えないかの違いだけだと思っています。

SIDは、GET・POST・Cookie使用・未使用に関わらず、
ユーザーのPCに必ず一度は残ります。
そのPCを触れる人ならば確認することが出来ますので
SIDを使ってなりすまし接続などは簡単なように思います。

セキュリティー面でセッションに出来ることといえば
SIDを盗まれたとしても使えないよう、
クッキーの有効期限を短くするとか、
処理途中で SID を変更して古いSIDを無効にしてしまうとか、
くらいではないかと思います。

session.cache_limiter (キャッシュを無効とすることが)が
セキュリティーで有効なのは、
インターネットカフェのように、
同じPCを同じユーザー名で異なる人が使うような場合で、
戻るボタンで前の人が何かを入力していたフォームにもどっても、
入力した内容が再現されないことです。


セキュリティーの話題はついつい長くなってしまいますね。
すみません。
Parent: 715  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 792 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑