- ベストアンサー
PHP・CGIを使用してアクセス制限を行おうと考えています。ネットで検
PHP・CGIを使用してアクセス制限を行おうと考えています。ネットで検索したところ http://q.hatena.ne.jp/1146982425 というページを見つけて「これだ!」と思ったのですがPHP・CGIともに詳しくないので 「画像表示スクリプト」を使用してアクセス制限を行うやり方がわかりません。 ご存知の方がおりましたらご教示ください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
CGI(Perl) だとこんな感じで良いと思います。 --------------------------------------------- #!/usr/bin/perl # ここから制限処理 ##################### # 制限するホストを指定 @kick_host = ('softbank.ne.jp','123.111.101.'); # アクセス者のホスト情報取得 $host = $ENV{'REMOTE_HOST'}; if (!$host) { $host = $ENV{'REMOTE_ADDR'}; } # 制限に該当するかチェック foreach $host_temp (@host) { if($host =~ /$host_temp/) { print qq|Content-type:text/html\n\n|; print qq|表示が制限されています|; last; } } # ここから今まで通りの処理 ############# print qq|Content-type:image/gif\n\n|; # このほかに画像表示処理などなど open IMG,"gazou.gif"; binmode (IMG); print <IMG>; close (IMG);
その他の回答 (1)
- pme_yw
- ベストアンサー率100% (2/2)
ちなみに追記ですが…これは画像表示をホストで制限するものであり、 この画像を表示させているページへのアクセスを制限するものではありません。 ページへのアクセスを制限する場合は、そのページを CGI にして先ほどのコードを使ってみてください。
お礼
回答のフォロー、ありがとうございます! 上記の件、了解です。
お礼
回答、ありがとうございます! このスクリプトのままだと上手く動かなかったので いろいろ検索して調べまして、下記のようにして動作確認できました。 #!/usr/bin/perl # ここから制限処理 ##################### ✓ sub check { @kick_host = ('softbank.ne.jp','123.111.101.'); $host = gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2) || $ENV{'REMOTE_ADDR'}; foreach $i (@hosts) { if ($host =~ /$i/) { print "Access Denied\n"; exit; } } } # ここから今まで通りの処理 ############# print qq|Content-type:image/gif\n\n|;# このほかに画像表示処理などなど open IMG,"gazou.gif"; binmode (IMG); print <IMG>; close (IMG); exit; ただこれですと私のイメージしているアクセス制限ができません。 質問の際のリンクにあります「画像表示スクリプトは、コードが リクエスト元IPと一致しないと画像を出力しない」というようなPHPでの アクセス制御は難しいものなのでしょうか?