CGI-BBS > CGI > Perl >  参照制限(CGI)でSSIの使い方


カレッヂ
カレッヂ


質問者 かずま  投稿日 6/23(土) 16:59:34
参照制限(v1.00 /CGI)の利用についてですが、
私がやりたい事とは、次のことです。
例,個人のホームページで「自己紹介」のページを作るとします。
そこで、外部から私の「自己紹介」のページへ直リンクされては
嫌なので、トップページ(総合メニューのようなページ)からの
アクセスのみ「自己紹介」のページへアクセスを許可する場合。
通常は、トップページからリンク(リンク許可ファイルから)
して「自己紹介」のページに進んだ場合は
*******************************************************
#設定した条件に合えば__END__より下をそのままHTMLとして表示する
__END__
<html>
<head>
<title></title>
<body bgcolor="#FFFFFF" text="#000000">
(中略)
</body>
</html>

※profile.cgiというファイル名の場合
*******************************************************
CGIで設定した(上の部分)ものを表示させる事ができますが、
これでは、「自己紹介」のページを日々更新するとなった時、
CGIファイルの場合はホームページ制作ソフトで開いて編集(HTMLファイル)
する事ができません。
ですから、CGIの上記部分を以下のようにしたいと思います。
*******************************************************
#設定した条件に合えば__END__より下をそのままHTMLとして表示する
__END__
<html>
<head>
<title></title>
<body bgcolor="#FFFFFF" text="#000000">
<!--#include file="./profile.html"-->
  (または)
<!--#include virtual="/~xxxxx/profile.html"-->
</body>
</html>

※profile.cgiというファイル名の場合
*******************************************************
このように、トップページから、「自己紹介」のページに
アクセスした場合、上記の方法でSSIを使って、HTMLファイルを
表示させると、HTMLファイルをホームページ制作ソフトで、
日々更新ができ、わざわざCGIファイルを開いて、
こまかく更新する手間がはぶけます。

しかし、私がこのやり方で試して見ましたが、
SSIの昨日はCGIを使っているため、正常に機能しませんでした。
掲示板等のCGI-Sprictの場合は、投稿/観覧でCGI機能をつかいつつ、
投稿の際のリモートホストの表示にはSSI機能を使い、
記録します。これとおなじようなやり方で、
参照制限はCGI側で機能を働かせ、正常にアクセスされた場合は、
SSIを使い、別ファイルを表示する事はできませんでしょうか。

それと、もう一つ。
*******************************************************
#(参考)特定のページからのクリックアクセス以外はすべて拒否するには、そのページのURLを
#そのまま記述します.
#例:http://www.home.page/~user/where/sample.html
#----------------------------------------------------------------------------------------

$ref_url = 'http://your.home.page.url/';
*******************************************************
この部分で、リンク元アドレス(許可するアドレス)についてですが、
許可するアドレスを2つにする場合はどうすればよろしいでしょうか。

ようするに、
http://your.home.page.url1/index.html
http://your.home.page.url2/index.html
このアドレス(2つ。ファイル名まで指定)の場合には
以下の方法でよろしいのでしようか。
$ref_url = 'http://your.home.page.url1/index.html','http://your.home.page.url2/index.html';



面倒なことで申し訳ありませんが、
ご教授よろしくお願いします。 m(_ _)m
回答者 呑兵衛  [削除]  投稿日 6/25(月) 22:26:07
呑兵衛といいます。

問題は制限ファイルを profile.html にしたとたん制限し難くなることです。
リンクを張られても .cgi 下に展開するからこそ制限できるのでは。

逆発想で、許可していないリンク元からの接続要求にもエラーではなく、
最初に読んでもらいたいページをアンカーで埋め込んでHTMLで表示し、
正常な接続要求には、profile.htmlをアンカーで埋め込んだHTMLを表示する。
profile.htmlの名前を更新の都度変え、cgi に埋め込んだファイル名も変更し
html、cgi 共に更新する。
くらいの対応でしょうか。ssi の必要性はありません。

複数設定は
×  $ref_url = 'http://your.home.page.url1/index.html','http://your.home.page.url2/index.html';
○  @ref_url = ('http://your.home.page.url1/index.html','http://your.home.page.url2/index.html');
で、その後 @ref_url の中身と $ENV{'HTTP_REFERER'} を評価するスクリプトで判断します。
更新する profile.html には 最初に読んで欲しいページへのリンクだけを残しておくと
File Not Found を防げます。

要はどのファイルにリンクが張られた場合、どのように制限するかを決めることです。
回答者 呑兵衛  [削除]  投稿日 6/26(火) 18:58:32
呑兵衛です。

私に直メールを下さいましたが、こういった場所での質疑応答なので
ここに回答させて頂きます。

>> 許可していないリンク元からの接続要求にもエラーではなく、
>> 最初に読んでもらいたいページをアンカーで埋め込んでHTMLで表示し、

sub error { 以下のHTMLに たとえば annai.html からたどって欲しいのなら
<a href="../annai.html">入口</a>などと表示させます。

>> 正常な接続要求には、profile.htmlをアンカーで埋め込んだHTMLを表示する。

__END__ 以下に profile.html を
<a href="../profile.html">自己紹介</a>などと表示させます。

>> profile.htmlの名前を更新の都度変え、cgi に埋め込んだファイル名も変更し
>> html、cgi 共に更新する。

更新すれば、 profile.html を profile_1.html などと変更し,
annnai.html でアンカー表示する <a href="./profile.html"> を profile_1.htmlに、
cgi の __END__ で示すものも上と同じように変更する。

以上ですが、
cgi に書かれるprofile を参照制限が事実上効かない .html で表示したければ
profile.html の中身とファイル名を変更する
profile.cgi はリンク先 .html 名を変更する
annai.html もリンク先 .html名を変更する
の3つの作業が、あなたの要求を満足させる最も近いものになります。

返信(回答)する


Web裏技