先日のコメントスパム弾き実験では、 JavaScript を有効にしているときのみ hidden 属性の input タグがフォームに含まれるようにしていました。ですが、日常的に JavaScript を無効にしている人にコメントをつけてもらう場合は、いったん JavaScript を有効にした後リロードしてもらってうんぬんとしなくてはならず、そのへんの遷移をうまくハンドルしていなかったので、sh1.2 pyblosxomの shunuhs さんから「コメントできない」とのメールをいただきました。

ということで、「第2弾として dtml で published という変数を用意し、サーバ側でそのpublished を調べ、過去15分以内のものならコメントとして追加する」というようにしてみました。以下のような感じ。
comment_form の form 内の適当なところに
<input type="hidden" id="published" name="published" value="<dtml-var "int(ZopeTime().timeTime())">" />
を追加。

Entry.py の
def checkCommentValues(self,title,author,body,moderated,\ email="",url="",REQUEST=None):

def checkCommentValues(self,title,author,body,moderated,\ email="",url="",published=0,REQUEST=None):
とし、値をチェックしているところに
if not published.isdigit() or int(published) < int(time()) - 60*15: REQUEST.form["show_worning"] = REQUEST.form["show_worning"] + 1
みたいな処理を入れました。もちろんcheckCommentValuesを呼んでいるところや、 addComment() にも published を入れてやります。

これでまたもうちょい様子見してみよう。

追記 23:08
コメント入力画面を開き、15分以上経ってから submit したらうまいことはねられた。ので、一応は成功とも言える。
- 問題点 1:
コメントできなかったときのエラーメッセージが
is required.
と表示されるのみで、はねられた人はどうしてはねられたのかさっぱりわからんという問題がある。 COREBlog のソースとか DTML をもうちょい読んでみないと、ちゃんとしたメッセージの出し方がわからん。
- 問題点 2:
15分て短すぎる?
Posted by setomits at 10:53 | Comments: 3
Re: コメントスパム弾き実験 2
コメントのテストです ^_^;

コメント書きながら文を修正したりしてたら、結構15分くらいは経過しちゃうかも。
これって一旦はじかれたら入力したコメントを別のとこに退避してからリロードしないといけないのかな?
Posted by shuhuhs at 12:11 on 2005 Oct 3rd
Re: コメントスパム弾き実験 2
どうもです。バイクのことを何か書いてくれようとされてたんですよね?そちらのほうもぜひお願いします。

さておき、やっぱ15分とか経っちゃいますかね。ますよね。
今回の対策の趣旨は、「コメントスパマーがエントリをクロールして、そのフォームを元にコメントしようとしても弾いてやる!」ということなので、エントリを追加してすぐにコメントスパムをつけられない限りは、もうちょっと余裕をもった時間を設定すべきでしょうね。
そしてその時間の設定は、Entry.pyを直接さわるとかいうとち狂った方法じゃなく、Zopeの管理画面からできるべきだとは思います。で、そのへんのことは苦手なので、こういう趣旨を示しておけばCOREBloggerな方々がなんとかしてくれるかな〜とか甘く期待してたりするわけです。

あー、同じようなことを、トラックバックスパムよけに使っても良いのかも。
つまり、トラックバックping用のURLに、それを読んだときの時刻情報を埋めておいて...みたいな感じで。

と、こうしている間に15分が経ってしまうかも。
Posted by setomits at 12:38 on 2005 Oct 3rd
Re: コメントスパム弾き実験 2
この変更はロボットがつけるコメントスパムを弾くことが目的なので、制限時間を15分から30分に変更しました。

さておき、今日3つほどコメントスパムがつきました。
Zopeのログを見てびっくり。
スパムなコメントをPOSTするときのリファラを確認すると、ちゃんと該当エントリになっています。それくらいならそういうリファラをつけたPOSTをするだけでできるのですが、その前の時点でスタイルシートやら他のいくつかのJavaScriptも読んでいるのです。いやまあ、それもできなかないんでしょうけど、どうやらこれは本当にヒトっぽい。

まあコメントスパムは確認次第削除するのですが、なんだかエラいなあと思ってしまいました。
Posted by setomits at 11:52 on 2005 Oct 9th
Leave a comment
Required fields are marked with *
search
calendar
Nov 2009
SunMonTueWedThuFriSat
1234567
891011121314
15161718192021
22232425262728
2930     
archives
photos on flickr
www.flickr.com
bookmarks on delicious