"Shade検索"Wiki

CGI/IP拒否CGI

ドメインから拒否IPアドレスを抽出で書いたように、投稿内容にあるドメインからIPアドレスを抽出して投稿拒否するという方法が結構効果的なので、
既存の掲示板に簡単に追加できるモジュールというか、追加スクリプトを書いてみました。

特徴


投稿内容に含まれるURLから、そのサイトのIPアドレスを抜き出し、そのIPアドレスが拒否リストに登録されていたら投稿を拒否することができます。
また、拒否したいURLのドメインから投稿拒否IPを追加、編集することができます。

更新履歴

2010.4.6
ドメイン名から拒否IPを追加する処理で、ドメイン以外の文字列が含まれている場合でもドメインのみを抽出してIPに変換するよう変更しました。IP一覧の並べ方を変更しました。
2010.2.16
拒否ログの記録、閲覧機能を追加しました。
kent-webのyybbsに使用してみました。yybbsはほとんどオリジナルのままですが、投稿キーは無効にしています。
サンプル
2010.01.26
ドメインの頭に!や?がついていると、正しくドメインが抽出できないのを修正しました。
2009.12.25
投稿内容からのドメイン抽出がかなりいい加減だったので修正しました。

使用法


圧縮ファイルを解凍すると、refuse_ip.cgiというファイルができるはずです。これを掲示板CGIと同じディレクトリに設置しますが、その前に多少編集が必要です。

まず、refuse_ip.cgiの1行目の

#!/usr/local/bin/perl

をサーバーに合わせて編集します。これは掲示板CGIと同じにしておけば間違いないです。そして13行目の

$refuse_ip_password = '01234';

これは、このCGIのパスワードですが、これも適当なものに変更してください。refuse_ip.cgiの編集は以上です。
refuse_ip.cgiのパーミッションは掲示板CGIと同じに設定してください。

さらに、掲示板CGIの方も編集します。
掲示板CGIで投稿内容をチェックしている部分を探します。
たとえば、Kent-netのWEB FORUMだったら、init.cgiのchk_form関数の中、461行目あたりに追加するといいでしょう。
投稿されたコメントが$in{'message'}、URLが$in{'url'}というハッシュで渡されるので、このどちらもチェックするなら、たとえば

require './refuse_ip.cgi';
foreach ('message', 'url') {
	$defuse = &ip_check($in{"$_"});
	$err .= qq(${defuse}はURL内で使用できません<br>) if $defuse;
}

のような文を入れます。ip_check 関数に検査する文字列を入れて渡すと、文字列から抜き出したIPアドレスを拒否リストと照合し、一致するものがあると、そのIPアドレスを返します。したがって&ip_checkからの戻りがTrueなら、投稿を拒否するという処理になります。

拒否IPのリストはrefuse_ip_cgiの6行目に

@refuse_ip = ('127.0.0.1','125.199.251.136');

のような形で保存されています。拒否IPを追加するには、refuse_ip.cgiを直接編集してもかまいませんが、refuse_ip.cgiから編集フォームを起動させることができます。
このフォームで拒否したいドメインを入力すると、IPを抽出します。拒否IPリストにまだ登録されていなかったら追加します。refuse_ip_cgi自身の該当部分を書き換えることになります。
この編集フォームを起動するには、掲示板の管理用ページに編集フォームへのリンクを張るのがいいと思います。
たとえばWEB FORUMだったら、admin.cgiの91行目あたりに

<form action="./refuse_ip.cgi" target="_blank">
<input type="hidden" name="refuse_ip_password" value="01234">
<input type="hidden" name="edit_refuse_ip" value="1">
<input type="submit" value="拒否IPリストを編集する">
</form>

のように追加します。編集後掲示板に戻るのが面倒なので、別ウインドウを開くのが無難だと思います。
hiddenタグのrefuse_ip_passwordのvalueはrefuse_ip.cgiで指定したパスワードを入れておきます。



Plugin not found.


>>2010/04/07 02:07:00更新>>