PukiWikiで空のコメントが追加されてしまう場合の対処法


投稿日:2018年2月5日
  • 0
  • 0


私の管理しているPukiWikiのサイトではconfigとrecorderというプラグインを利用して、独自フォーマットのコメントを追加できるようにしています。

これはこれで正しく動作していたのですが、1つ問題がありました。


問題点

まずは問題の発生する環境を再現します。

:config/plugin/recorder/comment/pageというページに以下の内容

#style(class=comment){{
[textarea](''[name]'' &new{[_date]};)
----
RIGHT:このレビューが参考になった…&votex([投票]);
}}

:config/plugin/recorder/comment/formというページに以下の内容

お名前:[name][textarea]
[insert]

これであとは、普通のページに以下の記述で問題なく動作します。

#recorder(comment,0)

この設定で以下のようなフォームが追加されます。

これはこれでよかったのですが、1点問題がありました。それは「コメントが空(empty)でも追加されてしまう」という問題です。
私の管理するサイトではスパム対策として「spam_filter.php」を利用しています。ただし、このプラグインには空の投稿を弾くフィルターがありません。通常の投稿の場合、内容が空だとページが削除されるため、フィルターが必要ないという事情からです。

そこで、「spam_filter.php」を編集して「コメントが空の場合は追加しない」という機能を追加しました。


lib/spam_filter.phpを編集

38行目辺りに以下を追記。

// 追記 何も書き込まれていない場合に弾くフィルター用
define('SPAM_FILTER_EMPTY_PLUGIN_NAME', 'tracker,recorder,edit,comment,pcomment,article,areaedit');

続いて250行目あたり、check_pluginという関数の下あたりに以下を追記。

// 追記 何も書き込まれていない場合に弾くフィルター
function ngempty($pluginnames = SPAM_FILTER_EMPTY_PLUGIN_NAME)
{
    if (!$this->check_plugin($pluginnames)) return FALSE;

    if ($this->post_data['textarea'] === "" || $this->post_data['msg'] === "") {
        $this->message .= 'empty ';
        return TRUE;
    }
    return FALSE;
}

見てもらえれば分かる通り、post_dataのtextareaかmsgが空の場合はエラーメッセージという簡単な対策です。


pukiwiki.ini.phpを編集

合わせてフィルターを追加します。
私の場合は以下のようにしています。

define('SPAM_FILTER_COND', '#ngempty() or #ipcountry() or #atag() or #urlbl() or #onlyeng() or #useragent() or #ipbl()');

これで設置完了です。

空の投稿をした場合、以下のようにエラーメッセージが表示されます。


現在のページを共有する



現在のページに関連する記事

PukiWikiで空のコメントが追加されてしまう場合の対処法 PukiWikiで日本以外の国からの編集を拒否する方法
spam_filter.phpを導入 spam_filter.phpを導入
spam_filter.phpで特定のホストをブロック spam_filter.phpで特定のホストをブロック
spam_filter.phpで特定のホストをブロック spam_filter.phpで特定のホストをブロック
PukiWikiで複数行のコメントを挿入 PukiWikiで複数行のコメントを挿入
PukiWikiへ「attachref.inc.php」と「areaedit.inc.php」プラグインの導入 PukiWikiへ「attachref.inc.php」と「areaedit.inc.php」プラグインの導入
PukiWikiで空のコメントが追加されてしまう場合の対処法 5段階評価プラグインを通して学ぶPukiWikiのプラグインを作成する方法

おすすめの記事

fluentdとNorikraでDoS攻撃を遮断し、メールで通知する方法

fluentdとNorikraでDoS攻撃を遮断し、メールで通知する方法

コピペから脱出!iptablesの仕組みを理解して環境に合わせた設定をしよう

コピペから脱出!iptablesの仕組みを理解して環境に合わせた設…

WordPressでアイキャッチ画像をサムネイルとして一覧ページに表示する方法

WordPressでアイキャッチ画像をサムネイルとして一覧ページに表…

DELL Inspiron 3250のHDDをSSDへ換装して、メモリを16GBへ増設

DELL Inspiron 3250のHDDをSSDへ換装して、メモリを16GBへ増設

Linuxの基本の基本。Linuxの基本的なディレクトリ構成

Linuxの基本の基本。Linuxの基本的なディレクトリ構成

UWSCでPhotoshopの作業を自動化する方法

UWSCでPhotoshopの作業を自動化する方法

パソコン用メガネなんていらない!無料でできる5つの疲れ目対策

パソコン用メガネなんていらない!無料でできる5つの疲れ目対策

Google Feed APIの代替手段としてjQueryだけでRSSを表示する方法

Google Feed APIの代替手段としてjQueryだけでRSSを表示する方法


コメントを残す

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。