Date: 2005-12-15
Tags: plone

COREBlog2簡易spam-filter

コメント追加の許可設定の件を調べようと思ったら、コメント追加が可能になったとたんspamコメントが10件以上投稿されていた。ムカツク。とりあえず、COREBlog1のBuzzWordsチェック機構をCOREBlog2用に改造してチェックするようにしたので、これで様子見。

追加コードは意外と少なくて、portal_skins/COREBlog2/validateCommentを以下のようにカスタマイズする。これでBuzzWordsに引っかかった項目がエラーとなって投稿できない。

for key in ['title', 'body', 'author', 'email', 'url']:
    if REQUEST.has_key(key):
        m = context.validateBuzzWords(REQUEST[key])
        if not m:
            state.setError(key, 'Pleae remove NG words.', new_status='failure')

if state.getErrors():

いちおうvalidateBuzzWordsも載せておく。これもportal_skins/custom等に置いて、引数textを取るようにしておく。今回の用途ではmoderated変数が用をなしていないけど、まぁいいか。

buzz_words = (
  'casino',
  'poker',
)

moderated=True
try:
    if not moderated:
        return moderated

    s = str(text).lower()
    for w in buzz_words:
        if s.find(w) >= 0:
            moderated = False
            break
    else:
        moderated = True

except:
    pass

return moderated