• ベストアンサー

環境変数のHTTP_REFERERのチェック

配布されたコードを見ているのですが、意味がわからないので 教えて下さい。 $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; } とあります。前方が一致とはどういう意味でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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の偽装が出来るので あんまり難しく考えても意味は有りませんが、、、

myfrend
質問者

お礼

回答有難うございます。

その他の回答 (1)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

文字列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

myfrend
質問者

お礼

回答どうもありがとうございます。 前方一致している意味はあわかりました。 しかし、前方が一致したのがあったらそのホストからだからという のが判りません。 また、localhostは、そのプログラムが動いている(ネットワーク レベルでの)コンピュータ自身というのは、127.0.0.1 という ような意味なのでしょうか。

関連するQ&A