[TOP]    [Archives]    [TRACKBACK ALBIREX]    [DATA BOX]    [BBS]    [BBS過去ログ]    [LINK]

ネット・PC: 2006年11月アーカイブ

鬱陶しいったらありゃしない!w

コメントにリンクを全然含まないスパムって、どういう意味があるんでしょうねえ?
単なる愉快犯?意味わかんねー。

で、最近あまりに挨拶掲示板へのスパムが多いので、対策を施してみました。

(ちなみに、挨拶掲示板は、PCからも携帯からも投稿できるようになっているんだけど、それぞれ別のスクリプトを使って動かしています。今回のスパムは、携帯用のスクリプトを経由して送られてきているので、そちらのみ対策を施してみました。
なので、携帯からは英文字のみの投稿がエラーになりますが、PCからの投稿に関しては英文字のみの投稿も受け付けますよ、meatくんw)


最初はNGワードを登録する方法。

@ngword = ('Excelent','Best wishes','Thank','useful','Pleasant','successful');
foreach (@ngword) {
if(index($in{'message'}, $_)>=0) { &error(""); }
}

メッセージを$in{'message'}という変数で受け取っている場合、@ngwordの配列にある言葉が含まれているとindex関数で文字位置を返すので、0以上の値が返った場合にエラーとなります。NGワードはいくらでも追加することができます。


しかしだ。いちいちNGワードを登録しているのはイタチごっこ。
面倒だから、英文字のみの投稿はいっさい受け付けないようにしてみる。

jcode::convert(\$in{'message'}, 'euc');
if ($in{'message'} =~ /[\xA1-\xFE][\xA1-\xFE]/) { jcode::convert(\$in{'message'}, 'sjis');}
else { &error(); }

携帯からの投稿の文字コードはshift-JISなので、それをいったんeucコードに変換する。メッセージの中に2バイト文字が含まれていれば、そのまま元のshift-JISに戻すけど、もし含まれていない(半角英数字のみ)の場合にはエラーを返します。

ほとんどの掲示板のcgiプログラムに応用可能なので、興味ある方はやってみてください。

あまりに荒っぽいスパム対策、と言えばそうだんだけど、まあ個人サイトだからいいよね(苦笑
たぶんこれでうまくいくと思うんだけど、正常な投稿までエラーになる可能性もあるので、何かおかしいことがあったら連絡ください。

あいさつ掲示板

月別アーカイブ

 

このページの記事