Djangoの標準コメントシステムを使用していますが、スパム対策ハニーポット機能を拡張したいと思います。
フィールドのデフォルトの「name」と「id」を、「website」などのスパムボットにとってより魅力的なものに変更することを考えました。私はhtmlをチェックしました、そしてこれはこのように見えます:
<p style="display:none;">
<label for="id_honeypot">Never send a human to do a machine's job</label>
<input type="text" name="honeypot" id="id_honeypot" />
</p>
この要素のデフォルトを変更するとスパム対策機能が向上すると考えるのは正しいですか?私はそれを次のように変更してみましたdjango/contrib/comments/forms.py
:
class CommentForm(CommentDetailsForm):
#use to be honeypot = forms.CharField(...
website = forms.CharField(required=False,
label=_('Never send a human to do a machines job')
def clean_honeypot(self):
"""Check that nothing's been entered into the honeypot."""
value = self.cleaned_data["website"]
if value:
raise forms.ValidationError(self.fields["website"].label)
return value
そして、これにより、djangoによって生成されたhtmlが正常に変更されますが、メカニズム全体が機能しなくなります。この非表示フィールドにデータを入力して送信し、コメントを追加しましたname
。id
他にもいくつかアイデアがありますが、最初にこれを機能させたいと思います。デフォルトのハニーポットを変更して、正常に機能させることは可能name
ですid
か?
PSこれを行うためのより効率的な方法は、実際のdjangoコードで作業する代わりに、django.contrib.commentsを拡張し、そこで変更をコーディングすることだと思います-これを達成するための最良の方法は何でしょうか?