2005
Oct
2nd
先日のコメントスパム弾き実験では、 JavaScript を有効にしているときのみ hidden 属性の input タグがフォームに含まれるようにしていました。ですが、日常的に JavaScript を無効にしている人にコメントをつけてもらう場合は、いったん JavaScript を有効にした後リロードしてもらってうんぬんとしなくてはならず、そのへんの遷移をうまくハンドルしていなかったので、sh1.2 pyblosxomの shunuhs さんから「コメントできない」とのメールをいただきました。
ということで、「第2弾として dtml で published という変数を用意し、サーバ側でそのpublished を調べ、過去15分以内のものならコメントとして追加する」というようにしてみました。以下のような感じ。
ということで、「第2弾として dtml で published という変数を用意し、サーバ側でそのpublished を調べ、過去15分以内のものならコメントとして追加する」というようにしてみました。以下のような感じ。
comment_form の form 内の適当なところに
Entry.py の
これでまたもうちょい様子見してみよう。
追記 23:08
コメント入力画面を開き、15分以上経ってから submit したらうまいことはねられた。ので、一応は成功とも言える。
- 問題点 1:
コメントできなかったときのエラーメッセージが
- 問題点 2:
15分て短すぎる?
<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
コメント書きながら文を修正したりしてたら、結構15分くらいは経過しちゃうかも。
これって一旦はじかれたら入力したコメントを別のとこに退避してからリロードしないといけないのかな?
さておき、やっぱ15分とか経っちゃいますかね。ますよね。
今回の対策の趣旨は、「コメントスパマーがエントリをクロールして、そのフォームを元にコメントしようとしても弾いてやる!」ということなので、エントリを追加してすぐにコメントスパムをつけられない限りは、もうちょっと余裕をもった時間を設定すべきでしょうね。
そしてその時間の設定は、Entry.pyを直接さわるとかいうとち狂った方法じゃなく、Zopeの管理画面からできるべきだとは思います。で、そのへんのことは苦手なので、こういう趣旨を示しておけばCOREBloggerな方々がなんとかしてくれるかな〜とか甘く期待してたりするわけです。
あー、同じようなことを、トラックバックスパムよけに使っても良いのかも。
つまり、トラックバックping用のURLに、それを読んだときの時刻情報を埋めておいて...みたいな感じで。
と、こうしている間に15分が経ってしまうかも。
さておき、今日3つほどコメントスパムがつきました。
Zopeのログを見てびっくり。
スパムなコメントをPOSTするときのリファラを確認すると、ちゃんと該当エントリになっています。それくらいならそういうリファラをつけたPOSTをするだけでできるのですが、その前の時点でスタイルシートやら他のいくつかのJavaScriptも読んでいるのです。いやまあ、それもできなかないんでしょうけど、どうやらこれは本当にヒトっぽい。
まあコメントスパムは確認次第削除するのですが、なんだかエラいなあと思ってしまいました。