【至急・重要】ウィルスチェックのお願い

Change Style


WP: (続)Akismet de-spam view Hack

前回までのあらすじ

「何っ!?ME 2.0.4 同梱の akismet.php は、2.0.5 とコードが違うだと!?」
情報部に緊張が走る。

WordPress 本体のアップグレードという障壁を前に、ひろまささんハック を諦めようとするぼの。

Akismet による誤捕獲は見逃され続けてしまうのか――!?

WP: (未)Akismet de-spam view Hack

今度こそハック

そんな中、WPの魔術師 ひろまささんより、救済の手が差し伸べられた。

wp-content/plugins/akismet/akismet.php 267行目でオッケー。

$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' AND LENGTH(comment_content) <> CHAR_LENGTH(comment_content) ORDER BY comment_date DESC LIMIT 150");

そうなのだ。仮に1ヶ月放置したところで、うちのサイトにマルチバイト文字コメントが150件以上来ようはずもない。リミット切られようが、ページ替えがなかろうが、関係ないのだった。

ハック後の捕獲画面:
「Latest Spam」欄には表示されない うーむ、すっきり。
しかし、1件もないと逆に削除しにくかったりもする。(^^;

ついでに、ここに [ 全て見る » ] ボタンを付けて、必要に応じて全スパムを見ることもできるように、気が向いたらするかもしれない。

ダッシュボードに件数表示

(注) 「Ronan くんお誕生記念・バージョンアップ前にいろいろ試してみよう週間」は延長され、今月も引き続き「試してみよう月間」となっております。

先日のダッシュボード修正により、Akismet 累計スパム数ではなく、現在の捕獲数を表示するようにしてあった。

今回は、誤捕獲の可能性がダッシュボードで分かるように、マルチバイトものの捕獲数を併記してみる。

323行目あたり(ME2.0.4同梱の akismet.php の場合):

function akismet_stats() {
    // $count = get_option('akismet_spam_count');
    $count = ksd_spam_count();</code>
    $mbs_count = mb_spam_count();
    if ( !$count )
        return;
    $path = plugin_basename(FILE);
    echo '<h3>'.('Spam').'<h3>';
    echo '<ul><li>'.sprintf(('<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.'), 'http://akismet.com/', "edit.php?page=$path", number_format($count) ).'</li>';
    if ( $mbs_count ) {
        echo '<li><strong><a href="edit.php?page='.$path.'">要チェック</a></strong>: スパムじゃないかもしれないものを '.$mbs_count.' 件捕獲中です。</li>';
    } else {
        echo '<li>この中に日本語を含むものはありません。</li>';
    }
    echo '</ul>';
}

add_action('activity_box_end', 'akismet_stats');

function mb_spam_count() { // マルチバイトスパムの件数 global $wpdb, $comments; $count = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam' AND LENGTH(comment_content) <> CHAR_LENGTH(comment_content)"); return $count; }

修正後ダッシュボード:
マルチバイトスパムがないときはその旨表示/あるときはその件数と捕獲画面へのリンクを表示

  • mb_spam_count() というネーミングは、php のマルチバイト関数みたいでイマイチ。orz
  • 日本語もなんだかおかしいけど、まあいいや。2.0.5 にアップしてからまともに直そう。
  • っていうか、その前に 2.1 がきてしまうのだろうか。 Σ(゜д゜lll)
  • (メモ) TOC Generator より DeCoder を先に動かしたい。コードブロック中の h3 タグにも目次用 id が振られてしまう。(・;) とりあえず実体参照の手書きで回避。

改造後・初トラックバック

ひろまささんが、ダッシュボード改造の件を元記事に追記して、トラックバックしてくださいました。(^-^)

そしてそれを Akismet くんが捕獲。 … orz

恩を仇で返す、とはこのことだよー! 1

ひろまささん、ごめんなさい。(・;)
でも、早速動作を確認できて、ありがたくもありました。 :-)

マルチバイト捕獲時画面

ダッシュボード
要チェック: スパムじゃないかもしれないものを 1 件捕獲中です。

Akismet 捕獲画面
「Latest Spam」欄にマルチバイトの1件のみ表示

捕獲画面切り替えハック 追記

Akismet htaccess extension2 を使うようになると、IP でアクセス制限する前に、本当にその IP を弾いていいのかを確認するため(欧米語系でも誤捕獲の可能性はあるので)、捕獲内容をチェックする必要が出てきた。

しまったー。早くも [全て見る] ボタンが必要になったぉ…。orz

そんなとき、よしともさんからも救済の手が…。3

思いつきで従来の一覧表示もできるようにしてみました。

雑念ベース » Akismet 有名ハックの解説と追加ハック

よしともさんの追加ハックをすると、次のように自動的に 通常表示←→マルチバイトスパム表示 が切り替わるようになる。

  • 普段は全スパム表示4
  • マルチバイトスパムが捕獲されているとき、ダッシュボードの「要チェック」をクリックすると、マルチバイトスパムのみを表示

実際に試してみると、「このときはこの表示で見たい」という気持ちのままに、自然に表示が切り替わってくれて、とても使いやすいです。ありがたく使わせていただきますー。 :-)

従来からの修正箇所(うちの場合):
適用開始: 2007.1.9~

  1. 267行目: ひろまささんハックの行を差し替え。

    • (旧) $comments = ~
    • (新)

      switch ($_GET['akismet_spam_list'])
      {
          case 'mb':
              $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' AND LENGTH(comment_content) <> CHAR_LENGTH(comment_content) ORDER BY comment_date DESC LIMIT 150");
              break;
          default:
              $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_date DESC LIMIT 150");
      }
      

    switch によって次のように場合分け:

    • case 'mb': → ひろまささんハックコードでマルチバイトスパムのみ表示
    • default: → ハック前コードで通常表示

    これによって、http://~/wp-admin/edit.php?page=akismet/akismet.php&akismet_spam_list=mb でアクセスされたとき、case 'mb': に該当するのでマルチバイトスパム表示、&akismet_spam_list=mb が付かなければ通常表示となる。

  2. ぼのハックの「要チェック」の行に強調部分を追加(function akismet_stats() 内)。

    • (旧) echo '<li><strong><a href="edit.php?page='.$path.'">要チェック</a></strong>: スパムじゃないかもしれないものを '.$mbs_count.' 件捕獲中です。</li>';
    • (新) echo '<li><strong><a href="edit.php?page='.$path.'&amp;akismet_spam_list=mb">要チェック</a></strong>: スパムじゃないかもしれないものを '.$mbs_count.' 件捕獲中です。</li>';

    これによって、要チェックのときのリンク URI が http://~/wp-admin/edit.php?page=akismet/akismet.php&akismet_spam_list=mb になる。

関連ハックまとめ 追記

  1. 反省のため、広辞苑で「あだ」を引きました。

    あだ【仇・敵】
    1. 攻めて来る者。敵兵。
    2. 自分に害をするもの。かたき。「親切心がかえって―になる」
    3. うらみ。遺恨。「恩を―で返す」
    「広辞苑」第三版/新村 出 編(岩波書店)

    あれ?2 の意味じゃないのか…!Σ(゜д゜lll) [back]

  2. 注: 最新版は Worst Offenders という名前で出ています。Akismet htaccess extension は Akismet 1.15 用です。Akismet と差し替えて使うので、WP 2.0.5 以上に使うと Akismet がダウングレードされることになります。[back]
  3. リンクからよしともさんのページを知りました。ハックの解説ありがとうございます。そして、お誕生日おめでとうございます。 :-) [back]
  4. ME2.0.4 付属 Akismet では 150件まで。[back]

6 Responses to “WP: (続)Akismet de-spam view Hack”

  1. hiromasa.zone :o) :

    Akismet de-spam view Hack…

    もーどうしようもなく、Akimet くんがスパムじゃないコメントを捕獲してくれます。 どうしようかと思案…。
    とりあえず、うちのサイトの場合基本は日本語だっ (more…)

  2. ぼの :

    ひろまささん、ありがとぉー。o(^-^)o
    動作確認を兼ねて送ってくださったとは。。。(感涙)
    ということで、ぼのも追記返しですー。 :-)

  3. Tips Community :

    スパム対策プラグイン Akismet に日本語フィルタを搭載…

    最近の WordPress には標準装備されているスパム対策プラグインである Akismet 。
    スパムを自動判定するということもあって、スパムではないコメントやトラッ (more…)

  4. おで(Odyssey) :

    こんばんは!
    我が家も1日100件程度だったスパムが本日ついに1日1000件越えを達成してしまったのでorz、ひろまさ’sハック+ぼの’sハックの二重対処をぶちこんでふぁいあああああああしてやろうと思ったのですが、ぼの’sハックでエラーが出ちゃいました。

    2.0.5だとダメみたいですね。てへ(/ω\)
    ぼのさんも早くバージョンアップしてしてヽ(´ー`)ノ

  5. ぼの :

    >べんじゃみんさん
    はじめまして。Tips Community、いつも拝見しております。(^-^)
    トラックバックありがとうございます。
    うう、それなのに、ごめんなさい。。。べんじゃみんさんのTBも捕らわれの身になっていました。(・;)

    改造を試してくださって、どうもありがとうございました。
    同じ状況の方がいらして、少しでもお役に立てたと分かってうれしかったです。
    さらに、常々「かわいいなあー」と思っていたパンダくんfavicon が表示されていて、ダブルでうれしいですー。
    今後ともよろしくお願いいたします。 :-)

    >おでさん
    こんにちは。トライしてくださってありがとうございますー。
    2.0.5とはあそこも違うのですねえ。ごめんなさいです。。。

    でも、うちのバージョンアップは 2月くらいです。てへ(/ω\)

    そんなわけで、Akismet de-spam view Hack シリーズ第三弾は、おで’sハックになる可能性が急浮上…?
    早くトラックバックしてしてヽ(´ー`)ノ(拝借)
    なぁんて。(笑)

  6. Odysseygate.com :

    [WP] Akismet de-spam View Hack…

    スパムのちスパム、ところによりスパムということで相変わらずスパム多いですね。こんなに多いといちいちAkismetの画面なんて見てられません。
    Akismet de-sp (more…)

コメントをどうぞ