モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

掲示板cgiへの簡単なスパム対策

掲示板へのスパム書き込みが多いという相談を受けて対策を書いてみました。
たったこれだけでだいぶ効果がありますし、副作用がそれほどないので、お試し下さい。
採用した制限は以下の通りです。

  • 本文中にHTMLでURL記入されたら拒否(</a> [/url] の存在で判断)

(参考 Semplice:livedoor Blogで禁止ワードを設定し、簡単に多くのコメントスパムを排除する方法)

  • URL欄が記入されているときは日本語が含まれていない場合拒否

(参考 コメント SPAM 対策 - 日本語を含まないコメントを禁止 - まちゅダイアリー (2006-08-28))

  • 本文中にURLが4件以上含まれていたら拒否

(参考 MT SpamLookup Best Practices: blog.bulknews.net)


例示する掲示cgiでは

  • $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 =~ /(&lt;\/a&gt;|\[\/url\])/i ) {
  error('HTMLでURLを書くことは出来ません。');
}

if ( $url ne '' && $message =~ /\A[!-~\n ]+\Z/ ) {
  error('URLを入力するときは本文に日本語を含めてください。');
}

if ( $link_count > 3 ) {
  error('一度に4件以上のURLを書くことは出来ません');
}