- ベストアンサー
環境変数の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; } とあります。前方が一致とはどういう意味でしょうか。
- みんなの回答 (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の偽装が出来るので あんまり難しく考えても意味は有りませんが、、、
その他の回答 (1)
- bgbg
- ベストアンサー率53% (94/175)
文字列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
お礼
回答どうもありがとうございます。 前方一致している意味はあわかりました。 しかし、前方が一致したのがあったらそのホストからだからという のが判りません。 また、localhostは、そのプログラムが動いている(ネットワーク レベルでの)コンピュータ自身というのは、127.0.0.1 という ような意味なのでしょうか。
お礼
回答有難うございます。