WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:Aが発行したクッキーをBのCGIで取得する方法について

0:[投稿] 青木 [2004/12/23 03:20 ][環境:ALL CGI Cookie]

はじめまして。

CGIから発行されるクッキーについてお伺いしたいのですが、
例)AのCGIを起動した時に発行されるクッキーを、同一サーバー(同一階層)にあるBのCGIで取得することは可能でしょうか?

Aのプログラムはクッキーの自動生成パスワードを参照して、パスワードが合致しない場合の不正アクセスができないようになっているのですが、Aと共に利用するBのプログラムは、クッキーを発行しないため、アドレスバーから入力すると不正アクセスができてしまう状態で困っております。

Bのプログラムを起動する時も、Aが発行したクッキーを取得できればパスワードを参照して不正アクセスが防止できるのですが、
Bのプログラム内に書くクッキー取得のためのソースが分かりません・・

現状では下記のようになっているのですが、
Aのクッキーを取得するには、どのような指定をすれば宜しいのでしょうか?

SCRIPT_NAME という部分が関係していますでしょうか?

どなたかお分かりになる方がいらっしゃいましたら、どうぞアドバイスを宜しくお願い致します。


  $cookies = $ENV{'HTTP_COOKIE'};

       @pairs = split(/;/,$cookies);
       foreach $pair (@pairs) {

               ($key,$val) = split(/=/,$pair,2);
               $key =~ s/ //g;

               if ($key eq $ENV{'SCRIPT_NAME'}) {

                       @pairs = split(/,/,$val);
                       foreach $pair (@pairs) {

                               ($key,$val) = split(/:/,$pair,2);
                               $COOKIE{$key} = $val;
                       }
                       last;
               }
       }
    $pwd = $COOKIE{'pwd'};
    if ($in{'pwd'}) { $pwd  = $in{'pwd'}; }

       if ($in{'pwd'} eq '') { &error('エラー'); }


1:[回答] バギンズ [2004/12/23 05:13 ]

同一ドメイン内の同一階層であるなら、Cookie自体は何の問題なく取得できるはずです。

$ENV{'SCRIPT_NAME'}は、ドメイン内のスクリプトのアドレスが入っているので、Aで保存したCookieをBで読むときは

if ($key eq $ENV{'SCRIPT_NAME'}) {

if ($key eq '/~hoge/A.cgi') {

といった感じで、Aの$ENV{'SCRIPT_NAME'}の値を直接指定してあげればよいかと思います。

でも、わざわざ$ENV{'SCRIPT_NAME'}でチェックしているのって意味あるのかなー...


2:[関連] 青木 [2004/12/23 18:23 ]

バギンズさん早速のアドバイスありがとうございます。

早速試してみたところ、クッキーは取得できるようになりました。
ただ・・ クッキーを持っていると、中に書いてあるパスワードがそれぞれ異なっても、違う所にアクセスはできてしまうみたいなんです。(チャットなのですが、部屋が複数あります)

AのCGIはクッキーとは別に部屋ごとのlogファイルにもパスワードを出力しているのですが、それをBから参照できれば確実に制限できると思うのですが、BのCGIがlogファイルを参照して、中に書いてあるパスワードxxxxxを確認して、http://〜.B.cgi&pass=xxxxx に該当しない直アクセスをはじくということも可能でしょうか?

ここ数日ずっと検索をしながら色々調べてはいるのですが、
perlの知識がありませんので、かなりの苦戦を強いられております。
きっと知識のある方でしたらそれほど難しくはない課題なのかもしれませんが・・
ちょっと途方に暮れています・・

一応、頭の中ではこんな形にできればよいのかなと・・思っています。

1:A.cgiがlogにパスワードを記述
2:B.cgiがlogを読み込み、中に書かれたパスワードxxxxを確認
 :B.cgiはB.cgi&pass=xxxxのみ稼働し、pass=xxxxに間違いがある場合はエラー

logファイルは3行書かれるようになっているのですが、
1段目 不明
2段目 パスワード1
3段目 パスワード2

のような記述になっています。
パスワード1と2に完全一致する場合のみOKというようにもできるのでしょうか・・?

すみませんが、何卒アドバイスのほう、宜しくお願い致します。


3:[回答] バギンズ [2004/12/24 03:23 ]

>ただ・・ クッキーを持っていると、中に書いてあるパスワードがそれぞれ異なっても、違う所にアクセスはできてしまうみたいなんです。(チャットなのですが、部屋が複数あります)

どこのどんなCGIを、何が目的でどの箇所をどう直したのかを提示せずに、結果だけを書かれても回答のしようがありません。

A.CGIが発行したCookieをB.cgiで読めるようにしただけで、そう動くようになったというのなら、元々がそういう作りのCGIだっただけです。

>AのCGIはクッキーとは別に部屋ごとのlogファイルにもパスワードを出力しているのですが、それをBから参照できれば確実に制限できると思うのですが…

そのCGIの本質的な仕様を理解せずに、「こうすればできるかも」なんて判断しても解決になるかどうか怪しいです。
そもそも、ログファイルってのは記録するためのものですから、ログファイルを使ってパスワード管理を行うって事自体が間違っています。
ファイルでパスワード管理を行うのなら、パスワード管理用のファイルが別に用意されているでしょうし、パスワード管理用のファイルがあるのなら、そのファイルの読み込み処理も当然あると考えられます。

別スレをたてて、本来やりたいことを新規で質問することをお勧めします。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World