電子書籍の厳選無料作品が豊富!

配布されたコードを見ているのですが、意味がわからないので
教えて下さい。
$referer_url[0] = 'http:\/\/localhost\/'; と宣言してあり、
そもそもlocalhostの意味もわかりません。
##=====================================
## リンク元チェック処理 =
##=====================================
if($REFERER_seigen == 1){
  &ref_chk;
  if ( $refchk==1 ){ #一致しなければ終了
    print "エラー403";
    exit;
  }
}
という処理で、ref_chk関数を呼んでおりその中身が
##=====================================
sub ref_chk{
  $refchk = 1; #フラグの初期化(一致しない) = エラー403となる
  foreach $url_temp(@referer_url){
   if ( $ENV{'HTTP_REFERER'} =~ /^$url_temp/){
    $refchk = 0; #前方が一致したのがあったらそのホストからだからOK
   }
  }
  return $refchk;
}
とあります。前方が一致とはどういう意味でしょうか。

A 回答 (2件)

localhost自体の意味は#1さんの書かれたとおり



$referer_url[0] = 'http:\/\/localhost\/';
と有りますのでホスト名の候補として 配列 @referer_url の1番目の要素にlocalhostがあり
おそらく$referer_url[1] や $referer_url[2] などに別のホスト名が入っているのではないかと?
 (例 LAN内からはlocalhost で
 ドメイン名としてwww.example.com と
  test.example.net と言う別名がある場合
 $referer_url[0] にlocalhost $referer_url[1]にwww.example.com  $referer_url[2]に test.example.net
  )

**しかし localhost がOKとなると 他の人が自分のPC/サーバー上に置いた
 ページからのリンクもOKとなっちゃいますけどね。
もっとも、多少知識のある人なら 簡単にHTTP_REFERERの偽装が出来るので
あんまり難しく考えても意味は有りませんが、、、
    • good
    • 0
この回答へのお礼

回答有難うございます。

お礼日時:2007/07/13 21:36

文字列Aが文字列Bに前方一致するとは、文字列Bが文字列Aで始まるということです。



A='http://www.example.com/'
B='http://www.example.com/foo/bar/index.html'

という文字列である場合、AはBに前方一致しているといいます。

localhostは、そのプログラムが動いている(ネットワークレベルでの)コンピュータ自身を表します。
http://d.hatena.ne.jp/keyword/localhost
    • good
    • 0
この回答へのお礼

回答どうもありがとうございます。

前方一致している意味はあわかりました。
しかし、前方が一致したのがあったらそのホストからだからという
のが判りません。

また、localhostは、そのプログラムが動いている(ネットワーク
レベルでの)コンピュータ自身というのは、127.0.0.1 という
ような意味なのでしょうか。

お礼日時:2007/07/13 21:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!