mt-comments.cgi に簡易スパムフィルタを実装する
あまりにもコメントスパムが多くなってきたので、mt-comments.cgi に急遽自前フィルタを追加してみた。結構いい感じ。
下記は 'sex' と 'porn' を含むコメントをポストできなくした例。
実際にはスパム業者はある程度絞れるので、具体的に特定の URL を本文に含むもの、などとしている。
あまりにもコメントスパムが多くなってきたので、mt-comments.cgi に急遽自前フィルタを追加してみた。結構いい感じ。
下記は 'sex' と 'porn' を含むコメントをポストできなくした例。
実際にはスパム業者はある程度絞れるので、具体的に特定の URL を本文に含むもの、などとしている。
MTBlogTimes のサイトに書いてある、月ごとのファイル名で生成する方法ですが、実際にはうまくいかないんだよね。あれを真に受けて悩んだ人も多いのでは。で、ぐぐってみたらMTTagInvoke を MTBlogTimes に使う というステキな Tips を見つけた。早速、 Date-Based Archive に次のように追加して Rebuild した。
<!-- BlogTimes -->
<MTTagInvoke tag_name="MTBlogTimes" fillcolor="#999999" textcolor="#999999" linecolor="#ffffff" bordercolor="#ffffff" width="170" height="12" save_dir="images" show_text="on">
<MTTagAttribute name="month"><$MTArchiveDate format="%Y%m"$></MTTagAttribute>
<MTTagAttribute name="name"><$MTArchiveDate format="blogtimes-%Y-%b"$></MTTagAttribute>
<MTTagContent><a href="http://nilesh.org/mt/blogtimes/" target="_blank"><img src="<$MTBlogTimesFileURL$>" width="<$MTBlogTimesWidth$>" height="<$MTBlogTimesHeight$>" border="0" alt="B L O G T I M E S" title="B L O G T I M E S" /></a></MTTagContent>
</MTTagInvoke>
出力結果は月別アーカイブ参照。
テンプレートの汎用属性として、sanitizeがある。これは、データに含まれるタグを取り除いたりする方法を指定する。
Movable Typeのマニュアルのひな形 TAG たち > Tag 全体を通しての属性によると
疑いのある文書に,浄化フィルターをかけます. この属性の値が 1 の場合, weblog の設定か全体の設定でしてある,標準の浄化ルールが適用されます. 属性値が 0 の場合,この Tag に関しては浄化が行われません. 属性値がそれ以外の場合,属性値は浄化ルールとして扱われます.
で、すべてのタグを取り除きたい場合は、sanitize=""とすればいいのかと思ったら、それではどうも0と同じ扱いになるらしい。いったいどうしたらよいのでしょうか。
エントリーのタイトルでの検索結果をでるように作ったものをREBUILDすると、こんなエラーになります。
MT::App::CMS=HASH(0x8069d44) Wide character in print at lib/MT/FileMgr/Local.pm line 88.
思いついて、MT::FileMgr::Localの73行目に
binmode FH, ':utf8';
を追加してみました。結果、エラーはでなくなりましたが、文字化けは直りません。to be continued...
MTGoogleSearchなどのタグを使って、エントリーのタイトルの検索結果を出そうと試みているのですが、文字化けしてしまいます。
Google API で文字化けでも、同じような症状が。でも、この際とは「EUCだから文字化け?」ってなってますが、raindropはUTF-8なんだけどな・・・。引き続き要調査。
やっと、ブログ全体に手が入ったところで、次にいじくりたいのは、エントリー内でリンクを張ったとき、target="_blank"を毎回書くのがめんどくさい、というところ。要はfrog.raindrop.jp以外のホストへのリンクにはtargetを勝手につけるようなフィルタがあればいいなってところですか。そんなの、誰かが作ってそうなので、探してみようと思っているのですが、同時に、私の悪い癖「作ってみたい!」ってのも少しあるわけです。
そこで、調査に乗り出したところなのですが、これなんか参考になりそうです。
MovableTypeのプラグイン作成(邦訳)
ただし参考になるかならないかは、これから読むわけです。
「New Comment Posted to の文字化けをなおす。」でみた、Movable Typeのメールの本文作成するとこ
require Text::Wrap; $Text::Wrap::cols = 72; $body = Text::Wrap::wrap('', '', $body) . "\n$link_url\n\n" . $app->translate('IP Address:') . ' ' . $comment->ip . "\n" . $app->translate('Name:') . ' ' . $comment->author . "\n" . $app->translate('Email Address:') . ' ' . $comment->email . "\n" . $app->translate('URL:') . ' ' . $comment->url . "\n\n" . $app->translate('Comments:') . "\n\n" . $comment->text . "\n";
は
$body = jcode( $body )->jfold(( 72, "\n" )); $body .= "\n$link_url\n\n" . $app->translate('IP Address:') . ' ' . $comment->ip . "\n" . $app->translate('Name:') . ' ' . $comment->author . "\n" . $app->translate('Email Address:') . ' ' . $comment->email . "\n" . $app->translate('URL:') . ' ' . $comment->url . "\n\n" . $app->translate('Comments:') . "\n\n" . $comment->text . "\n";
のがよさげか?
[raindrop::diary] New Comment Posted toの件を、取り急ぎなおしてみた。全体をちゃんと見たわけじゃないので、適当。だけどちゃんと直った。
# MT::App::Comments # From Line 349 # <<< MODIFY # my $charset = $app->{cfg}->PublishCharset || 'iso-8859-1'; my $charset = 'iso-2022-jp'; # >>> MODIFY $head{'Content-Type'} = qq(text/plain; charset="$charset"); my $body = $app->translate( 'A new comment has been posted on your blog [_1], on entry #[_2] ([_3]).', $blog->name, $entry->id, $entry->title); require Text::Wrap; $Text::Wrap::cols = 72; $body = Text::Wrap::wrap('', '', $body) . "\n$link_url\n\n" . $app->translate('IP Address:') . ' ' . $comment->ip . "\n" . $app->translate('Name:') . ' ' . $comment->author . "\n" . $app->translate('Email Address:') . ' ' . $comment->email . "\n" . $app->translate('URL:') . ' ' . $comment->url . "\n\n" . $app->translate('Comments:') . "\n\n" . $comment->text . "\n"; # <<< ADD require Jcode; $body = new Jcode( $body )->jis(); # >>> ADD
あとは、extlibにJcodeをいれる。こんだけ。