スクリプトメモ » SSI
20060628
アクセス拒否

.htaccessを使ったアクセス拒否は良くありますが、あえてSSIを使ってアクセス拒否をしてみます。
そもそも.htaccessが使えなくて、SSIが使えるという環境はなかなかないと思いますが、、、

<!--#set var="addr" value="$REMOTE_ADDR"-->
<!--#if expr="$addr=/^192.168.1./" -->
<meta http-equiv="Refresh" content="0;url=denied.html">
<script>location.href="denied.html";</script>
<!--#endif -->

このコードを<head>から</head>の間に記述します。
拒否したいIPアドレスを <!--#if expr="$addr=/^192.168.1./" -->に記述してください。
REMOTE_ADDRを取得して、特定のIPアドレスなら<meta>タグのリフレッシュを使ってdenied.htmlを表示する、という物です。

<meta>とJavaScriptを併用しているのは、ブラウザによってはブラウザの戻るボタンを使うと、Refresh前のページ(refreshの<meta>タグが書かれているファイル)を表示できることがあります。
といっても、JavaScriptを切れば表示できるかもしれないので、.htaccessによる拒否ほど強くはありません。

IPアドレスは、xxx.yyy.zzz.nnnと「 . 」で4つに区切られた数字ですが、nnnの部分は、インターネットに接続するたびに変わる可能性があります。
xxx.yyy.zzzの部分は、プロバイダーが同じなら変わることはほとんどありません。
そこで、「xxx.yyy.zzz.」(zzzのあとに「 . 」があります)を指定することで、特定のプロバイダーからのアクセスを拒否するようにします。
同じプロバイダーを利用していると全員アクセス拒否されることになりますが、これはどうしようもありません。
また、xxx.yyy.zzzが同じで、別のプロバイダーというのは(現実には存在しますが、その人たちがアクセスしてくることはよほど大きなサイトでない限り)ほとんどありません。

zzzのあとに「 . 」を入れるのは、
192.168.1.12
192.168.11.2
この2つは違うアドレスですが、「 . 」を指定していないと、192.168.1で判断するため、両方同じと見なされます。
「 . 」を指定していると、「 192.168.1. 」と「 192.168.1.11. 」で判断するため、違うアドレスとわかります。


Wicker Wings