CafeGoju Website Top
◆ Announce ◆
◆ Counter ◆
Total : 1,951,941
本日 : 138 / 昨日 : 88
◆ Function ◆
キーワード検索

カテゴリー
全て(117)
雑談(12)
Goju関連(18)
スタッフ(8)
Web関連(8)
お出掛け(7)
グッズ(11)
独り言(15)
起立性調節障害(4)
DIY(5)
凍結破損関連(5)
(未分類)(44)
通常連続要約
(このページを含む)
表示   
◆ Log list ◆

最新の8件


2023/09/04(月)
 [Web関連]
2015/02/18(水)
 [Web関連] [独り言]
2007/02/07(水)
 [Web関連]
2007/01/30(火)
 [Web関連]
2007/01/23(火)
 [Web関連]
2007/01/20(土)
 [Web関連]
2006/03/22(水)
 [Web関連]
■ 遺言
2006/03/20(月)
 [雑談] [Web関連]
◆ Recent Comment ◆
2014/10/10(金) 15:31:39
posted by マスター
2014/10/08(水) 10:57:16
posted by じゅんじゅん
2014/09/12(金) 00:56:10
posted by マスター
2014/09/10(水) 14:52:29
posted by じゅんじゅん
2013/07/07(日) 14:05:06
posted by jp3brx

System time 0.031250

マスターの独り言

<< スパム対策(その3) スパム対策(その2) >>
 スパム対策(その2:追加)
【2007/01/30(火)】

 [Web関連]

先日書いた、スパムクローラーに対する掲示板のメールアドレス対策ですが、お間抜けな事に不十分である事が分りました(^-^;

実はGojuで使用している『KENT-WEB』さんのYY-BOARDv4.5だと前回の処置だけでは「過去ログ」から生のメールアドレスが見れてしまうのです。

「過去ログ」は通常の表示用サブルーチン(sub html_log{})とは別のサブルーチン(sub past{})で処理されてますので、そちらも対策してやらなければならなかったと言う訳でして・・・。

ただ、過去ログのデータは通常表示用のデータと異なりhtmlタグが記述されていて、sub past{}内でデータをそのままprintしていますから少し工夫が必要になってきます。

で、一々処理するのも面倒なので、javascriptでメールアドレスを再変換させる為のライブラリ(mail_convert.pl)を作りました。メールアドレスと名前(なくても可)を渡せば、javascript化してリターンされるものです。掲示板だけでなく他のcgiでも利用することが出来ますので、使って見たい方は下記をクリックしてダウンロードしてください。

mail_convert.pl ver0.0.1

lzhファイルにしてあるので、適当な解凍ソフトで展開してください。展開して出来たmail_convert.plをテキストエディタで開けば使い方が載っています。

【追記(2007/03/03)】
上記バージョンにはスタイルシートが出力しないバグがありました。
修正したものを下記に置いておきます。

mail_convert.pl ver0.0.2

 

で、掲示板の方ですが、前回記述した部分(sub html_log{}内)は次のようになります。もちろん、yybbs.cgiで事前にmail_convert.plをrequireしておく必要があります。

 #-- メールアドレスのスパム対策
 if( $mail ){  $name = &MLCON::convert($mail, $name, '', 0);  }

検索サブルーチン(sub find{})内も念のために同じようにしておきます。

sub find{

#・・・・・(中略)・・・・・#

  foreach ($page .. $page_end) {
   ($no,$reno,$date,$name,$email,$sub,$com,$url)
       = split(/<>/, $new[$_]);
   if ($email) { $name = &MLCON::convert($email, $name, '', 0); }
   if ($url) { $url = "&lt;<a href=\"http://$url\" target='_top'>HOME</a>&gt;"; }

   if ($reno) { $no = "$renoへのレス"; }

   # 結果を表示
   print "<hr>[<b>$no</b>] <font color=\"$sub_color\"><b>$sub</b></font>";
   print " 投稿者:<b>$name</b> <small>投稿日:$date</small> $url<br>\n";
   print "<blockquote>$com</blockquote>\n";
  }

#・・・・・(中略)・・・・・#

}

過去ログのデータにはメールアドレスが直接タグ(<a href="maileto:〜">)で記述されている為、表示サブルーチン(sub past{})内の処理は次のようにします。

sub past{

#・・・・・(中略)・・・・・#

#-- 過去ログ検索部  

# 表示開始
foreach ($page .. $page_end) {
 $new[$_] =~ s/<a href="?mailto:([^">]+)"?>([^<]+)<\/a>/&MLCON::convert($1, $2, '', 0)/egi;
 print $new[$_];
}

#・・・・・・・(中略)・・・・・・・・#

 # ページ区切り処理
 $start = $page + 1;
 $end   = $page + $p_log;

 $i=0;
 open(IN,"$file") || &error("Open Error : $file");
 while (<IN>) {
  $flag=0;
  if ($_ =~ /^\<hr\>\[\d+\]/) { $flag=1; $i++; }
  if ($i < $start) { next; }
  if ($i > $end) { last; }

  if ($flag) {
  $_ =~ s/<a href="?mailto:([^">]+)"?>([^<]+)<\/a>/&MLCON::convert($1, $2, '', 0)/egi;
   print $_;
  }
  else {
   $_ =~ s/<hr>//ig;
   $_ =~ s/<a href="?mailto:([^">]+)"?>([^<]+)<\/a>/&MLCON::convert($1, $2, '', 0)/egi;
   print "<blockquote>$_</blockquote>\n";
  }
 }
 close(IN);

#・・・・・(中略)・・・・・#

}

メールアドレスを再変換する為のjavascriptは次のようにすることでロードされます。

$java = &MLCON::load_java;

本来ならばこの$javaをsub header{}内でprintすればOKなのですが、YY-BOARDv4.5ではこの方法が使えません。

mail_convert.plでは再変換する為のjavascriptが3つ(実質は2)あり、メールアドレスが一つも無かった場合は何も出力しない仕様になっています。その為、メールアドレスをコンバートした【後】に呼び出す必要があるのですが、YY-BOARDv4.5ではヘッダーを出力した後に順次print処理されるのでそのままでは再変換用javascriptの出力がファイルの最後の方に来てしまいます。

変換されたメールアドレスはブラウザに読み込まれたと同時に再変換用javascriptを呼び出すため、再変換用javasciptが先に読み込まれていなければエラーとなってしまうのです。

 

ということで、ちょっとベタですが、メールアドレスがあろうがなかろうが再変換用javascriptを出力する事にして、sub_header{}内に次のように記述しました。

print <<"__END_OF_SCRIPT__";

$MLCON::JAVA[0]
$MLCON::JAVA[1]
$MLCON::JAVA[2]

__END_OF_SCRIPT__

これで、通常表示も過去ログもクローラー対策を施したことになったわけです(多分)

<つづく>

最終更新日:2008/07/30(水) 16:39:20
Posted by マスター

トラックバック(0)   コメント(0)  

コメント記入欄へ


コメントの記入

お名前 ID:
メールアドレス (任意)
コメント
パスワード (固有IDを表示する為のもの。8文字以内)
ブラウザに保存 (名前、メール、パスワードを保存するならチェック)
非公開 (名前とパスワードを設定すれば、自分も閲覧できます)

投稿に当たって、下記の事柄にご留意下さい。

  • 誹謗、中傷、個人情報の書き込みはお止め下さい。予告なく削除します
  • 管理者がコメントを必ず見るとは限りません。管理者に伝える必要がある場合はメール等を利用してください
  • タグは使用できません
  • 名前が無記入の場合は「名無しさん」と表示されます
  • スパム対策の為、投稿の際は下記の数字を記入してください
    (携帯やブラウザによっては数字が正常に見れないかも知れません)
  • 管理者のみコメントを削除できます。投稿後は自分で削除や訂正は出来ません。お気をつけ下さい

この数字は【2024年11月25日 16時51分59秒】まで有効

上記の数字を記入してください

スパム対策(その3)

スパム対策(その2)