HOME
  Security
   Software
    Hardware
FPGA
  CPU
   Android
    Raspberry Pi
nLite
  etc.
   ALL
    LINK
English Translate 中文翻訳
BACK

2007/10/06

掲示板のスパム投稿(迷惑広告)を防ぐ方法 掲示板のスパム投稿(迷惑広告)を防ぐ方法

(掲示板cgi設置者 必見!! 掲示板cgiのスパム対策の一例を説明します)

Tags: [Windows開発]





●掲示板を設置していてスパム投稿でお悩みの方へ
最近はインターネットの掲示板で自動ロボットと思われる迷惑なスパム投稿(迷惑広告)が増えてきました。
ここでは、その対策として記事の投稿時に独自の投稿確認用文字列(ガードキー)の入力を必要とする機能を追加する改造方法を説明します。
この機能を組み込む事で、ある程度のスパム投稿を防ぐ事が出来ます。
ガードキーが内部固定でも通常の自動ロボットのスパム投稿には効果があります。

皆様のより良いインターネットライフの手助けになれば幸いです。

当方の掲示板でも固定キー方式で対策をして 2年以上になりますがスパム投稿を完全に防いでいます。


・ここでは下記の代表的な掲示板cgiの改造方法を説明します。
・簡易BBS MiniBBS
・レトロな簡易BBS v1.01 [FREESOFT]
・LIGHT BOARD
・YY-BOARD
・G-LIGHT
・Child Tree
・WaMu-Board Ver 3.6 (2007/01/16追加)
・レス付き画像掲示板 imgboard
・ブログソフト WordPress(コメントSPAM対策) (2007/03/31追加)
・Mega BBS(2007/10/06追加)

※ここではガードキーを 1234 としています。1234の所を好きな半角英数字に変更してください。
※"1234と入力"の部分を隠せば投稿者をメンバー制にできます。
※"1234と入力"の部分を"運営者の好きな数字・好きな言葉"とかにして内輪オンリーにする方法も良いでしょう。
※他の掲示板cgiでも下記を参考にして同様の対策が可能です。

1234の部分は実際に使用する場合は必ず他の文字列に変更してください。
 当ホームページを巡回しているSPAM業者がいる為、1234のままでは対策を突破される恐れがあります。

●Tips(ワンポイントアドバイス)
ガードキーの説明書きを漢字や平仮名のみで記載しておくと外国圏 避けになります。(日本語の内容を判読できる海外のスパム業者は事実上居ないと思われるので)

最近のスパム業者は掲示板の名称や cgiのファイル名を手掛かりに検索してスパム投稿の標的を探している様です。
なので、可能であれば cgiの名前を変えるとかした方が良いでしょう。(例:imgboard.cgi → imbd.cgi)
また、可能であれば cgiの規約に反しない範囲で名称も変更した方が良いでしょう。(例:imgboard → i-m-g-b-o-a-r-d)



「スパム」を Amazonで探す。

●簡易BBS MiniBBS (version 10.31)の場合
CGI RESCUE - ネットサーフレスキューWeb裏技

から本体をダウンロード

minibbs.cgiに下記追加を行います。

・370行近辺の htmlサブルーチンの中間に追加
 sub html {
 ~ 略 ~
  print "<input type=checkbox name=\"cookie\" value=\"on\" checked>投稿者とメールを保存<p>\n";
  print "<b>ガード用キー(必須)</b> <input type=text name=\"guard\" size=8>1234と半角で入力<p>\n";
  print "<input type=submit value=\"     O  K     \"><input type=reset value=\"キャンセル\"></form><p>";
 ~ 略 ~

・525行近辺の registサブルーチンに追加
sub regist {
 ~ 略 ~
  if ($ref_axs) {
    $ref = $ENV{'HTTP_REFERER'};
    $ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
    if (!($ref =~ /$reload/)) { &error('利用不可',"次のページ以外からの投稿は受け付けられません.<br>→ $reload"); }
  }
  if ($FORM{'guard'} ne '1234') { &error('入力ミス','ガード用キーを入力してください.'); }
  if (!open(READ,"$tmp_dir\/$file")) { &error('エラー','データが読み出せません.'); }
 ~ 略 ~


●レトロな簡易BBS v1.01 [FREESOFT]の場合
CGI RESCUE - ネットサーフレスキューWeb裏技

から本体をダウンロード

minibbs.cgiに下記追加を行います。

・240行近辺の FORMサブルーチンの中間に追加
sub FORM
{

print <<"EOF";
<form action="minibbs.cgi" method=post>
<input type=hidden name="cmd" value="add">
<b>ガード用キー(必須)</b><br>
<input type=text name="guard" size=8>1234と半角で入力<br>
名前<br>
<input type=text name="uname" value="$in{'uname'}" size=20 maxlength=30><br>

 ~ 略 ~

・460行近辺の FILEサブルーチンに追加
sub FILE
{

if ($cmd eq "add") { # 投稿

	return "ガード用キーを入力してください" if $in{'guard'} ne "1234";
	return "名前を入力してください" if $in{'uname'} eq "";
	return "名前は全角なら15文字(30バイト)以内で" if length($in{'uname'}) > 30;
 ~ 略 ~


●LIGHT BOARD (2005/11/20)の場合
:: KENT WEB - CGIスクリプト ::

から本体をダウンロード

light.cgiに下記追加を行います。

・115行近辺の viewlogサブルーチンの中間に追加
sub viewlog {
 ~ 略 ~
  (記事メンテ用)</td>
</tr>
<tr>
  <td><b>ガード用キー(必須)</b></td>
  <td><input type=text name=guard size=8 maxlength=8>
  1234と半角で入力</td>
</tr>
</table>
 ~ 略 ~

・208行近辺の registサブルーチンに追加
sub regist {
 ~ 略 ~
  if (!$post_flag) { &error("不正なアクセスです"); }
  if ($in{'guard'} ne "1234") { &error("ガード用キーを入力してください"); }
  if ($in{'name'} eq "") { &error("名前が入力されていません"); }
 ~ 略 ~



●YY-BOARD (Ver:5.8)の場合
:: KENT WEB - CGIスクリプト ::

から本体をダウンロード

yyini.cgiに下記追加を行います。

・293行近辺の formサブルーチンの中間に追加
sub form {
 ~ 略 ~
  print <<EOM;
<table border=0 cellspacing=1>
<tr>
  <td><b>ガード用キー(必須)</b></td>
  <td><input type=text name=guard size=8 class=f>
    1234と半角で入力</td>
</tr>
<tr>
 ~ 略 ~

yyregi.cgiに下記追加を行います。

・415行近辺の formCheckサブルーチンに追加
sub formCheck {
 ~ 略 ~
  # POST限定
  if ($postonly && !$post_flag) { &error("不正なアクセスです"); }
  if ($in{'guard'} ne "1234") { &error("ガード用キーを入力してください"); }
  # 他サイトからのアクセス排除
 ~ 略 ~



●G-LIGHT (v5.2)の場合
:: KENT WEB - CGIスクリプト ::

から本体をダウンロード

glight.cgiに下記追加を行います。

・1077行近辺の formサブルーチンの中間に追加
sub form {
 ~ 略 ~
  print <<EOM;
<table>
<tr>
  <td><b>ガード用キー(必須)</b></td>
  <td><input type=text name=guard size=8 class=f>
    1234と半角で入力</td>
</tr>
<tr>
 ~ 略 ~

・395行近辺の registサブルーチンに追加
sub regist {
 ~ 略 ~
  # 投稿チェック
  if ($postonly && !$post_flag) { &error("不正なアクセスです"); }
  if ($baseUrl) { &refCheck; }

  if ($in{'guard'} ne "1234") { &error("ガード用キーを入力してください"); }
  # フォーム内容をチェック
  if ($in{'name'} eq "") { &error("名前が入力されていません"); }
 ~ 略 ~



●Child Tree(v8.93)の場合
CJ-Club [www.cj-c.com]

から本体をダウンロード

cbbs.cgiに下記追加を行います。

・660行近辺の forms_サブルーチンの中間に追加
 sub forms_ {
 ~ 略 ~
 <small>(半角8文字以内$KEY)</small>
 </td></tr>
 <tr><td bgcolor=$ttb><b>ガード用キー(必須)</b></td><td>/
 <input type=text name=guard size=8$ff>
 1234と半角で入力
 </td></tr>
 $end_form
 ~ 略 ~

・1110行近辺の wri_サブルーチンに追加
 sub wri_ {
 if ($FORM{'guard'} ne "1234"){&er_("ガード用キーを入力してください!");}
 if($s_ret && $P ne "$s_pas"){&er_("パスワードが違います!");}
 ~ 略 ~


●WaMu-Board Ver 3.6の場合
CGI-PLANT - 無料CGI配布サイト

から本体をダウンロード

skin.htmlと bbs.cgiに下記追加を行います。

・skin.htmlの 105行近辺に追加
	<small>英数字4~8桁</small></td>
	</p>
</IF>

	<p class="item">
	<label for="item_guard" class="label"><b>ガード用キー(必須)</b></label>
	<input type="text" size=8 name="item_guard" id="item_guard" class="InputTxt" value="">1234と半角で入力
	</p>

   <p class="RegistButton">
<?IF $in{mode} ne 'edit'>
・bbs.cgiの 1350行近辺の regist_checkサブルーチンに追加
sub regist_check {

  if ($in{item_guard} ne '1234') { &error('ガード用キーを入力してください.'); }

	&host_get;

	### SPAMチェック


●レス付き画像掲示板 imgboard v1.22 (Rev.6.1d正式版)の場合
1998特報!倶楽部 CGIダウンロードセンター

から本体をダウンロード

imgboard.cgiに元々備わっている"会員パスワード機能"を使う事で簡単に出来ます。

・499行近辺の $use_passwd_flagを 0から 1に変更する。
$use_passwd_flag=1;
・501行近辺の @MEMBER_PASSWDの "password"を "1234"に変更する。
@MEMBER_PASSWD=("1234","","","");
・1099行近辺の 会員パスワード:の文字列を 1234を入力する:に変更する。
 <TD ALIGN=CENTER><font $font_option>1234を入力する: </font></TD>



●ブログ ソフト WordPressの場合(コメントSPAM対策)
WordPress Japan

から本体をダウンロード

元々 Akismetと言う強力なフィルタ機能があるようですが、最近はそれを突破してくる SPAMが出始めた様です。
(直接 wp-comments-post.phpを呼び出して投稿処理をすると書いてありました。)

既に色々と優秀な SPAM対策用プラグイン(Captcha系や 辞書フィルタ系)が有るのですが、直接ソースを改造する方法で考えてみました。
プラグイン機構が備わっているのにソース直接改造は正道と言えませんが、追加改造する個所が 2個所と少ないので簡単に改造する事が可能です。
なにより改造内容が数行なので処理内容が一目瞭然で、本改造は少しの変更で最大の効果を得られると自負しています。

※この改造内容は私の方では動作未確認ですが、問題無く動作する筈です。

・\wp-content\themes\classic\comments.phpに追加 ※
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url"><small>Website</small></label></p>
<p><input type="text" name="gkey" id="gkey" value="" size="10" />
<label for="gkey"><small>投稿キー(1234を半角数字で入力)</small></label></p>
<?php endif; ?>
・\wp-content\themes\default\comments.phpに追加 ※
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url"><small>Website</small></label></p>
<p><input type="text" name="gkey" id="gkey" value="" size="10" />
<label for="gkey"><small>投稿キー(1234を半角数字で入力)</small></label></p>
<?php endif; ?>
・\wp-content\themes\EasyAll\comments.phpに追加 ※
<p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url"><small>Website</small></label></p>
<p><input type="text" name="gkey" id="gkey" value="" size="10" />
<label for="gkey"><small>投稿キー(1234を半角数字で入力)</small></label></p>
<?php endif; ?>
※上記の classic/ default/ EasyAllのどれかを追加改造します。(どれかわからない場合は 3個とも)
※コメント入力画面に[投稿キー]の欄を追加しています。

・wp-comments-post.phpに追加
require( dirname(__FILE__) . '/wp-config.php' );

nocache_headers();
$comment_gkey = trim($_POST['gkey']);
if ( '1234' != $comment_gkey )
  wp_die( __('Error: please type a 正しい投稿キー.') );
$comment_post_ID = (int) $_POST['comment_post_ID'];
※サーバの負荷軽減の為に処理の最初に蹴る。

・xmlrpc.phpの function pingback_pingに追加
function pingback_ping($args) {
  global $wpdb, $wp_version;
  return new IXR_Error(0, '全てのPingBackを許可していません');
  //	↓これ以降は実行されない
  $this->escape($args);
※SPAM避けを優先にPingBackを全て蹴る。



●Mega BBS ver.1.6xの場合
Mega BBSスクリプト配布サイト

から本体をダウンロード

readres.cgiと megabbs.cgiに下記追加を行います。

・readres.cgiの 220行近辺に追加
<input type=hidden name=board value="$FORM{bo}">

<input type=hidden name=res value="$logg">
<b>ガード用キー(必須):</b><INPUT TYPE="text" NAME="gkey" SIZE=10 VALUE="">1234と半角で入力<br>
<input type=submit value="書き込む" name="submit"></form>
<DT>
<a name=last></a>
<a href=$htmlzpath/$FORM{bo}/index.html>■$bbstitleに戻る■</a>
・readres.cgiの 255行近辺に追加(i-mode用)
stay <input type=checkbox name=vires value="on">
sage <input type="checkbox" name="sage" value="on">
tt <input type="checkbox" name="touhaba" value="on">
ガード用キー(必須):<INPUT TYPE="text" NAME="gkey" SIZE=10 VALUE="">1234と入力<br>
<input type=submit value="投稿" name="submit">
</form>
・megabbs.cgiの 120行近辺の decodeサブルーチンの「##いろんな嵐対策」に追加
sub decode {
 ~ 略 ~

##いろんな嵐対策
  if($FORM{'gkey'} ne "1234"){&error("ガード用キーを入力してください","no");}
if($mode ne "" && $method eq "get"){&error("投稿方法がおかしいです","no");}
 ~ 略 ~
・megabbs.cgiの 800行近辺に追加
_EOF_
}
print HTML <<"_EOF_";
    <TEXTAREA NAME=com COLS=80 ROWS=8 wrap=soft></TEXTAREA><br>
<b>ガード用キー(必須):</b><INPUT TYPE="text" NAME="gkey" SIZE=10 VALUE="">1234と半角で入力<br>
<input type=submit value=スレッドを立てる name=submit>
<hr><b>
・megabbs.cgiの 1010行近辺に追加
<input type=hidden name=board value=$board><input type=hidden name=res value=$logg>
<input type=hidden name=file value=index.html>
<b>ガード用キー(必須):</b><INPUT TYPE="text" NAME="gkey" SIZE=10 VALUE="">1234と半角で入力<br>
<input type=submit value=書き込む name=submit>
 <a href=$cgizpath/readres.cgi?bo=$board\&vi=$logg target=_blank>レスを全部見る</a>
 <a href=$cgizpath/readres.cgi?bo=$board\&vi=$logg\&rm=100 target=_blank>最新レス100
・megabbs.cgiの 1430行近辺に追加(i-mode用)
print <<"_EOF_";
<TEXTAREA NAME=com COLS=80 ROWS=8 wrap=soft></TEXTAREA><br>
ガード用キー(必須):<INPUT TYPE="text" NAME="gkey" SIZE=10 VALUE="">1234と入力<br>
<input type=submit value=スレッドを立てる name=submit>
</body></html>
_EOF_


Tags: [Windows開発]



[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外はweb構成の変更で移動する場合があります)
Copyright (c) 2006-2007 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/software/bbs_spam/