掲示板への直リンクを防ぐには?

[上に] [前に] [次に]
まーくん [E-Mail] 1999/07/04(日) 00:35:37
掲示板へのアクセスを、特定のurl(自分のページ)から以外禁止したいのですが、
どうすればよいでしょうか?

掲示板のcgiでリンク元(REFER?)をチェックすれば出来る、とお聞きしたのですが、
私の技術では出来ませんでした。(~_~)

どうかアドバイスをお願いいたします。m(__)m

gama [E-Mail] [HomePage] 1999/07/04(日) 00:47:42
掲示板の cgi で参照元をチェックすれば出来るとおもいます。
環境変数 HTTP_REFERER です。
Perl では
$ENV{'HTTP_REFERER'}
で参照できます。

やま 1999/07/04(日) 01:04:14
具体的には、こんなのはどうですか?
ちなみに試していないので、動作保証なしです。

$url='http://www.abcd.ne.jp/efgh/';
if($ENV{'HTTP_REFERER'} !~ /$url/){
print "Content-type: text/html\n\n";
print "リンクしないでね。";
exit;
}

http://www.abcd.ne.jp/efgh/ は・・・わかりますねぇ。

まーくん [E-Mail] 1999/07/04(日) 01:35:30
[[解決]]
gamaさん、やまさん
アドバイスありがとうございます。

早速変更してみたところ、意図通りに動いてくれました。

重ねてお礼申し上げます。
ありがとうございました。m(__)m

まーくん [E-Mail] 1999/07/04(日) 11:33:27
大変です!

チェックしていて気づいたのですが、これだと書き込みが出来ません。
送信ボタンを押すと弾かれてしまいます。(T-T)

どう対処したらよいでしょうか?


掲示板は、プロバイダが用意した物です。
ソースを見てみると、ネットサーフレスキューさんのMiniBBS v7.93のようです。


誠に申し訳ございませんが、救援お願いいたします。m(__)m

zizz... [HomePage] 1999/07/04(日) 12:07:10
HTTP_REFERER でどこから辿って来たのかチェックするのはやめておいた方が良いです。

Internet Explorer, Lynx, Emacs-W3などは前に表示していたページのURLを
そのままRefererに載せてくるようです。
そのページからリンクされているか関係なく。

だから、Referer に入っているURLのページからリンクされているとは限りません。

以前、逆リンクのリストをPerlで自動作成しようと
サーバーのログに残っているRefererの値を取り出したのですが、
関係ないページが多すぎて諦めたことがあります。
これと基本的に同じです。

まーくん [E-Mail] 1999/07/04(日) 16:59:26
あらら・・・、それではこの方法ではダメなのですね・・・。(~_~)

何かいい方法はないかしら・・・。


P.S.
おっしゃっている通り、リロードの際にREFERERが掲示板自らになるのが問題のようです。
と言うことで、今までの方法で、
チェックurlに掲示板も追加したらとりあえずは大丈夫かな? と、思うのですがどうでしょうか?
もしOKなようでしたら、どのようにして記述したらよいのでしょうか?
$url='http://www.abcd.ne.jp/efgh/,hrrp://www.abcd.ne.jp/efgh/bbs.cgi';
と記述してもうまくいきませんでした・・・。

B-Cus 1999/07/04(日) 23:59:45
> Internet Explorer, Lynx, Emacs-W3などは前に表示していたページのURLを
> そのままRefererに載せてくるようです。
今回は、特定のページ経由でしか投稿できないようにしたい、という目的
なのだから構わないのでは?

> $url='http://www.abcd.ne.jp/efgh/,http://www.abcd.ne.jp/efgh/bbs.cgi';
> と記述してもうまくいきませんでした・・・。
 @url=('http://www.abcd.ne.jp/efgh/','http://www.abcd.ne.jp/efgh/bbs.cgi');
 foreach (@url){
  if($ENV{'HTTP_REFERER'} !~ /$_/){
   ...
  }
 }

あと、
 http://www.abcd.ne.jp:80/~efgh/
 http://www.abcd.ne.jp/%7eefgh/
 http://www.abcd.ne.jp/%7Eefgh/
などというREFERERを送ってくるブラウザがあるので、これも通した方が
いいでしょう。

まーくん [E-Mail] 1999/07/05(月) 00:29:49
B-Cusさん ありがとうございます。

ですが、変更後は全て弾かれるようになってしまいました・・・。(T-T)

urlの記述が悪いのでしょうか・・・。

B-Cus 1999/07/05(月) 00:34:43
まずは、print文だけを埋め込んで、どこでどういうREFERERが送られているか
確認してください。あと、大文字小文字が違ってもはじかないようにすると
いいかもね。

まーくん [E-Mail] 1999/07/06(火) 01:48:03
> まずは、print文だけを埋め込んで、どこでどういうREFERERが送られているか確認してください。
> あと、大文字小文字が違ってもはじかないようにするといいかもね。

申し訳ございません。m(__)m
どのような操作をすれば良いのかわかりません・・・。

はじめの、やま さんのソースの時はOKだったurlがB-CusさんのソースだとNGと言うことはあるのでしょうか?
それとも、私の記述が間違っているのでしょうか・・・。

やま 1999/07/06(火) 02:01:20
はじめに僕が書いたソースでは、http://www.abcd.ne.jp/efgh/ を書いておけば、
http://www.abcd.ne.jp/efgh/bbs.cgi も通ると考えたのですか、だめでしたか?
要は、http://www.abcd.ne.jp/efgh/ を含んでいないとき、NGとする様にした
積もりですので。
複数のパターンを通したい場合は、考えなければなりませんね。しかし、B-Cusさん
のソースでは問題ありな気がしますが(...の部分をNGとするんですよね)。

まーくん [E-Mail] 1999/07/06(火) 02:45:15
いえ、実は やま さんのソースで動作可能なんです。
ただ、私のツリー構造が変なんです。m(__)m

掲示板にリンクしているhtmlと、掲示板cgiのユーザディレクトリが違うのです。
http://www.hehehe.ne.jp/~mar_kun/index.html がリンク元で、
http://www.hehehe.ne.jp/~mar_chan/cgi-bin/bbs.cgi が掲示板です。

これだと、共通なのがプロバイダのアドレスだけなんですよ。
だから、リンク元のフルパスを記述したのですが、それだと、
掲示板に書き込みした時やブラウザのリロードボタンを押すなどして、
掲示板をリロードした時にREFERERが掲示板自身になってしまい弾かれてしまうのです・・・。

故に、リンク元と掲示板自体のurlの2つを通すようにしたかったのです。

それとも、http://www.hehehe.ne.jp/ までをチェックしておけば、
自分の設定したurl以外からは入れなくなるのでしょうか。
雰囲気的に、自分の他のページや、同じプロバイダの方のページからも飛んで来れそうな気がするのですが・・・。

オケアノス [E-Mail] [HomePage] 1999/07/06(火) 03:37:55
実際に確かめたわけではないのですが、チェックが2回だけなら

$url1 = '(リンク元)';
$url2 = '(掲示板)';

if ($ENV{'HTTP_REFERER'} !~ /$url1/ && $ENV{'HTTP_REFERER'} !~ /$url2/)
{
(弾く処理);
}

こんなので問題ないよーな気もします。

もうちょっと頑張れば綺麗にまとまると思いますが、
あまりひねると自分でも分からなくなったりします(そんなのは私だけか・・)

まーくん [E-Mail] 1999/07/07(水) 00:28:15
あ、なるほど。
C言語と同じような記述が出来るのですね。

早速試してみたいと思います。

[上に] [前に] [次に]