掲示板へのスパム書き込みが多いという相談を受けて対策を書いてみました。
たったこれだけでだいぶ効果がありますし、副作用がそれほどないので、お試し下さい。
採用した制限は以下の通りです。
- 本文中にHTMLでURL記入されたら拒否(</a> [/url] の存在で判断)
(参考 Semplice:livedoor Blogで禁止ワードを設定し、簡単に多くのコメントスパムを排除する方法)
- URL欄が記入されているときは日本語が含まれていない場合拒否
(参考 コメント SPAM 対策 - 日本語を含まないコメントを禁止 - まちゅダイアリー (2006-08-28))
- 本文中にURLが4件以上含まれていたら拒否
(参考 MT SpamLookup Best Practices: blog.bulknews.net)
- $message にメッセージ本文
- $url に書き込んだ人のURL
が入っているとします。
本文$message内に書かれたURLを自動リンク張ってる下記のようなコードがあったら、置き換えた数をカウントするように修正しておきます。
$message =~ s/(http:\/\/[\w\.\/\~\-\+\=\#\%\&\?\(\)]+)/<a href="$1">$1<\/a>/ig;
↓
$link_count = $message =~ s/(http:\/\/[\w\.\/\~\-\+\=\#\%\&\?\(\)]+)/<a href="$1">$1<\/a>/ig;
投稿内容のチェックで下記制限を追加します。
if ( $message =~ /(<\/a>|\[\/url\])/i ) { error('HTMLでURLを書くことは出来ません。'); } if ( $url ne '' && $message =~ /\A[!-~\n ]+\Z/ ) { error('URLを入力するときは本文に日本語を含めてください。'); } if ( $link_count > 3 ) { error('一度に4件以上のURLを書くことは出来ません'); }