2003年10月10日

リモートホストで投稿抑止

MovableType でもやっぱり荒らしを想定してコメント投稿やトラックバックを禁止するIPを設定できますが、最近のプロバイダはIP制限だけで制限するには面倒なIP帯を持つところも多いので、リモートホストでも制限できるよう、その改造をしてみました。

プログラムを追っかけた所、まず次を変更すればいいことがわかったので、早速変更

MovableType Version 2.64 日本語化済 lib/MT/App/Comments.pm の63行目を次のものと差し替え
if ($user_ip =~ /$banned_ip/) {
         ↓
if ($user_ip =~ /$banned_ip/ || $ENV{'REMOTE_HOST'} =~ /$banned_ip/) {

でもって、次に禁止IPを入れてみたらコレが15文字までしか登録できない・・・(;´д`)ノ

それじゃつらいんで、制限はずすためにソースを追いかけてみたけど、さっぱりどこでも制限掛けてない。
もしやと思ってDBのテーブル定義を覗いてみたらありました・・・

mt_ipbanlistテーブル
ipbanlist_ip列 varchar(15)

コレを128に拡張して、サイド禁止IPに長めのホスト名を入れてみたらちゃんと動いて制限も掛かりました( ̄▽ ̄)ノ

あと、差し替える条件式を見ればわかりますが、禁止IPには正規表現が使えちゃいます(^^;
つまりうっかり

192.168.1
なんていう風に登録すると「10.192.168.1」などにもヒットしてしまうので注意が必要です。
(特に上記の変更を行った場合はリモートホスト名でも比較されるため厳密な式を書かないとどこでヒットするかわからないので要注意です。)

ちゃんとした正規表現が書ける自信の無い人は以下のようにした方が安心だと思います

if ($user_ip =~ /^$banned_ip/ || $ENV{'REMOTE_HOST'} =~ /$banned_ip$/) {

↑コレならIPなら必ず先頭文字からの比較、リモートホストなら最後の文字からの比較になります

でも、使いこなせれば正規表現は便利なんで知らない人は覚えちゃいましょう( ̄▽ ̄)ノ

2003年10月28日(火) 追記
TrackBackの対策をするのをすっかり忘れてました(笑)

MovableType Version 2.64 日本語化済 lib/MT/App/Trackback.pmの164行目辺り次のものと差し替え
if ($user_ip =~ /$banned_ip/) {
         ↓
if ($user_ip =~ /$banned_ip/ || $ENV{'REMOTE_HOST'} =~ /$banned_ip/) {
これでTrackBackも同様に制限できます。

にしてもコメントよりむしろトラックバックをspamとかに使われた方が防ぎにくいんだよなぁ・・・
最悪無効しかないのか・・・

Posted by Takuchan at 2003年10月10日 00:55 | トラックバック(0)