記事No | : 3520 |
投稿日 | : 2008/04/30(Wed) 21:48:57 |
タイトル | : 拒否IPアドレスをファイル化 |
ID情報 | : earl |
投稿者 | : りゅう〜 |
URL | : http://www4.synapse.ne.jp/earl/cha2.htm |
JoyfulNote v2.72、YY-BOARD v6.21を複数使っています。
スパム対策として、暗証キーを使っているものもありますが、拒否IPアドレスも併用しています。
複数使っているため、拒否IPアドレスをcgiに記載するのでなく、kyohiaddr.datやkyohiaddr.cgiなどのようなファイルを用意し、複数のcgiから参照してアクセス制限をしたいのですが、方法をご伝授下さい。
また拒否IPアドレスだけでなく、拒否ホスト名も同様にしたいと考えています。
よろしくお願いします。
記事No | : 3522 |
投稿日 | : 2008/05/01(Thu) 02:43:40 |
タイトル | : Re: 拒否IPアドレスをファイル化 |
ID情報 | : hirayama |
投稿者 | : 平山 |
JoyfulNoteではinit.cgiに
$deny_addr = '';
で拒否IPアドレスを記述するようになっているので、
この部分をkyohiaddr.datに書いたら
上記の $deny_addr = 部分を
require './kyohiaddr.dat';
に書き換えるというのが、混乱が起きにくいと思います。
kyohiaddr.datを参照する他のCGIが別のディレクトリにあるなら、当然require以下のパスも変わります。
require行は
sub axscheck内のIPチェック前に入れた方が
投稿時以外の読み込み負担が減るかもしれませんが。
拒否ホスト名の場合も
$deny_host = '';
部分を別ファイルに書いて、以下同じです。
記事No | : 3526 |
投稿日 | : 2008/05/01(Thu) 21:20:41 |
タイトル | : Re^2: 拒否IPアドレスをファイル化 |
ID情報 | : earl |
投稿者 | : りゅう〜 |
URL | : http://www4.synapse.ne.jp/earl/cha2.htm |
ありがとうございます。
require './kyohiaddr.dat'; と書けば$deny_addr '30.85.44.* ・・・ ';と同じ事になるのでしょうか。
また具体的には
#-------------------------------------------------
# アクセス制限
#-------------------------------------------------
sub axscheck {
require './kyohiaddr.dat'; #<−ここに入れてみました
# IP&ホスト取得
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
のような感じでいいにでしょうか。
kyohiaddr.datを参照する他のCGIが別のディレクトリにもあるので、require '../kyohiaddr.dat';もしくは絶対パスを使います。
requireの書き方は
$deny_addr = require '../kyohiaddr.dat';
となるのでしょうか?
よろしくお願いします。
記事No | : 3527 |
投稿日 | : 2008/05/01(Thu) 21:32:49 |
タイトル | : Re^2: 拒否IPアドレスをファイル化 |
ID情報 | : earl |
投稿者 | : りゅう〜 |
URL | : http://www4.synapse.ne.jp/earl/cha2.htm |
ありがとうございます。
require './kyohiaddr.dat'; と書けば$deny_addr '30.85.44.* ・・・ ';と同じ事になるのでしょうか。
それとkyohiaddr.datへの書き方は
30.85.44.* 38.99.101.* 59.89.58.* ・・・
と、すべきか
30.85.44.*
38.99.101.*
59.89.58.*
・
・
と、enterで区切っていいのでしょうか。
また具体的には
#-------------------------------------------------
# アクセス制限
#-------------------------------------------------
sub axscheck {
require './kyohiaddr.dat'; #<−ここに入れてみました
# IP&ホスト取得
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
のような感じでいいにでしょうか。
kyohiaddr.datを参照する他のCGIが別のディレクトリにもあるので、require '../kyohiaddr.dat';もしくは絶対パスを使います。
requireの書き方は
$deny_addr = require '../kyohiaddr.dat';
となるのでしょうか?
よろしくお願いします。
記事No | : 3528 |
投稿日 | : 2008/05/02(Fri) 02:18:27 |
タイトル | : Re^3: 拒否IPアドレスをファイル化 |
ID情報 | : hirayama |
投稿者 | : 平山 |
require './kyohiaddr.dat';
とすると、kyohiaddr.datの内容を読み込んで実行することになるので
kyohiaddr.datの中身が
$deny_addr = '30.85.44.* ・・・ ';
という内容だったら、それをそこに書いたのと同じことになると、考えていいと思います。
書き方ですが、init.cgiで説明されているとおり、半角スペースで区切ってください。
改行して書きたいなら、splitで分割した後、改行文字を削除する必要があるかもしれません。
(試してないのでよくわかりませんが)
requireの挿入場所はそこで問題ないと思いますが、全角スペースはNGです。
$deny_addr = require '../kyohiaddr.dat';
ではなく
require '../kyohiaddr.dat';
です。
記事No | : 3529 |
投稿日 | : 2008/05/02(Fri) 07:53:56 |
タイトル | : Re^3: 拒否IPアドレスをファイル化 |
ID情報 | : earl |
投稿者 | : りゅう〜 |
URL | : http://www4.synapse.ne.jp/earl/cha2.htm |
ありがとうございます。
sub axsCheck {
require 'http://www4.synapse.ne.jp/earl/kyohiaddr.dat';
と、やっても、
sub axsCheck {
require '../kyohiaddr.dat';
とやっても、init.cgiはPerl Checkerでは、引っかからないのに、
掲示板を呼び出すとInternal Server Errorになります。
http://www4.synapse.ne.jp/earl/kyohiaddr.datをIEのアドレスに入れると、開くか保存するかを聞いてくるので、アドレス間違いでは無いと思います。
お手数ですが教えてください。
また、分からないのですが、
require '../kyohiaddr.dat';
とすると、内容が$deny_addになるのか(どうやって$deny_addに代入できているのか)が、分かりません。
これも教えてください。
よろしくお願いします。
記事No | : 3531 |
投稿日 | : 2008/05/02(Fri) 11:33:38 |
タイトル | : Re^4: 拒否IPアドレスをファイル化 |
ID情報 | : hirayama |
投稿者 | : 平山 |
URL | : http://www2u.biglobe.ne.jp/~k_hiray/sts/fsw/ |
>require '../kyohiaddr.dat';
>とすると、内容が$deny_addになるのか(どうやって$deny_addに代入できているのか)が、分かりません。
$deny_addに代入する式を書いたkyohiaddr.datをrequireで読み込んでいるだけです。
なので、kyohiaddr.datの中身はデータの羅列ではなく、
$deny_add = '30.85.44.* ・・・ ';
というような式になっている必要があります。
記事No | : 3536 |
投稿日 | : 2008/05/02(Fri) 22:11:44 |
タイトル | : Re^5: 拒否IPアドレスをファイル化 |
ID情報 | : earl |
投稿者 | : りゅう〜 |
URL | : http://www4.synapse.ne.jp/earl/cha2.htm |
ありがとうございました。
kyohiaddr.datの中身で代入するんですね。
他のcgiも、require '../kyohiaddr.dat';を適用して
エラーが出ないことまで確認できました。
これで、IPアドレスによるアクセス制限の管理が楽になりました。
本当にありがとうございました。
またよろしくお願いします。
記事No | : 3547 |
投稿日 | : 2008/05/04(Sun) 01:31:35 |
タイトル | : もう2点、教えてください |
ID情報 | : earl |
投稿者 | : りゅう〜 |
URL | : http://www4.synapse.ne.jp/earl/cha2.htm |
いろいろお世話になります。
もう2点、教えていただきたいのですが。
kyohiaddr.datを作成しましたが、拒否したいアドレスがかなりあり、kyohiaddr.datの中に書いた”$deny_addr = '30.85.44.* 38.99.101.*・・・”の文字数がかなり大ききなってしまいました。文字数の制限はありますか?
また、kyohiaddr.datの中身の書き方(以前にアドレスだけ書いて改行出来るかお聞きしましたが)を
$deny_addr = '30.85.44.* ';
$deny_addr = '38.99.101.*';
・
・
のように、一行ずつ$deny_addr =と書いてもいいのでしょうか?。
お手数ですがよろしくお願いします。
記事No | : 3548 |
投稿日 | : 2008/05/04(Sun) 03:08:32 |
タイトル | : Re: もう2点、教えてください |
ID情報 | : hirayama |
投稿者 | : 平山 |
URL | : http://www2u.biglobe.ne.jp/~k_hiray/sts/fsw/ |
文字数の制限はないと思います。
$deny_addr = '30.85.44.* ';
$deny_addr = '38.99.101.*';
と書くのはまずいです。これだと最後の行しか有効になりません。
改行したいなら
$deny_addr = '30.85.44.*
38.99.101.*
38.99.102.*
';
というように書く必要があります。
これで大丈夫だと思いますが、もしうまくいかなかったら
if ($addr =~ /^$_/i) { $flg = 1; last; }
の前の行に
$_ =~ s/\n\r/\n/g;
$_ =~ s/\r/\n/g;
$_ =~ s/\n//g;
とでも追加しておくといいと思います。これは改行コードを削除する処理です。
ところで私の経験からいうと、IPアドレスの拒否は手間の割にはあまり効果が期待できないような気がします。左3個のIPを含む投稿を拒否すると、同じプロバイダの善良な投稿者も拒否することになるし・・・
どういうタイプのスパムが多いのかわかりませんが、投稿キーを使いたくないのなら
禁止ワードによる拒否や半角文字のみの投稿拒否の方がまだ効果的かもしれません。
記事No | : 3553 |
投稿日 | : 2008/05/04(Sun) 11:14:23 |
タイトル | : Re^2: もう2点、教えてください |
ID情報 | : earl |
投稿者 | : りゅう〜 |
URL | : http://www4.synapse.ne.jp/earl/cha2.htm |
ありがとうございます。
文字数制限があったら、管理方法を考え直さないと・・・って思っていましたが、このままでいけそうですね。
改行コードを外す方法で、対応できると助かりますので、やってみたいと思います。
スパムはURL羅列の広告タイプですが、URL個数を2個にしているので、数はかなり少ないです。以前は英語スパムが多かったので、日本語強制(http://www4.synapse.ne.jp/~earl/mojilist.htm)を追加しました。かなり効果がありました。
また、比較的利用者が多い掲示板は投稿キーも併用しています。
私のページでは、ほとんど常連ばかりなので、IP制限を排除する方式ではなく、許可する方式の方が管理は簡単なのでしょうが、新規の方のために排除方式でやってみたいと思います。
また助けていただくかもしれませんが、よろしくお願いします。