Django蜜罐现场公用设施
django-honeypot的Python项目详细描述
django应用程序,提供防止自动表单垃圾邮件的实用程序。
提供模板标记、视图装饰器和中间件,以向表单添加和验证蜜罐字段。
作者詹姆斯特克与弗拉维奥库雷拉和丹尼尔格林菲尔德的贡献。
来源:http://github.com/jamesturk/django-honeypot/
要求
- python=2.7
- django>;=1.11
(django蜜罐0.6及更早版本支持django 1.8)
用法
设置.py
请确保将honeypot添加到settings.py中的INSTALLED_APPS。
您几乎总是需要定义HONEYPOT_FIELD_NAME,这是蜜罐字段使用的名称。一些复杂的机器人会试图避开名为honeypot的字段,因此最好将该字段命名为稍微真实一些的字段,例如“phonenumber”或“body2”。
HONEYPOT_VALUE是一个选项,您可以指定它来填充蜜罐字段,默认情况下,蜜罐字段将为空,任何输入到其中的文本都将导致一篇失败的文章。HONEYPOT_VALUE可以是不带参数的字符串或可调用的。
HONEYPOT_VERIFIER是一个高级选项,您可以指定它来验证蜜罐。默认验证器确保蜜罐字段的内容与HONEYPOT_VALUE匹配。使用对HONEYPOT_VALUE和HONEYPOT_VERIFIER可调用的组合,可以实现更高级的技术,例如使用时间戳。
向特定窗体和视图添加蜜罐字段
可以向特定表单添加蜜罐字段,并确保特定视图检查有效的蜜罐request.POST。这可以通过使用render_honeypot_fieldtemplate标记来实现:
在模板文件的顶部包括以下行:
{% load honeypot %}
然后在任何形式内,包括标签:
{% render_honeypot_field "field_name" %}
将呈现默认隐藏的名为“field_name”的蜜罐字段。如果未提供蜜罐字段,则该字段的名称将默认为HONEYPOT_FIELD_NAME。
要确保蜜罐字段既存在又正确,您需要使用check_honeypotdecorator from honeypot.decorators:
from honeypot.decorators import check_honeypot @check_honeypot(field_name='hp_field_name') def post_comment(request): ... @check_honeypot def other_post_view(request): ...
这个装饰器将确保一个字段存在于名为“FieldInNeX”的t{10} $中。@check_honeypot不带参数将使用默认的HONEYPOT_FIELD_NAME。
在站点范围内添加蜜罐字段
有时需要在网站范围内的所有表单中添加蜜罐。这在处理呈现自己表单的应用程序时特别有用。为此,我们提供了三个中间件,其功能类似于django自己的csrf中间件。
所有这些中间件都位于honeypot.middleware中。
HoneypotResponseMiddleware分析所有响应的输出,并重写任何使用method="POST"包含蜜罐字段的表单,就像它们是从{% render_honeypot_field %}开始的一样。大量借用django.contrib.csrf.middleware.CsrfResponseMiddleware这个中间件只重写内容类型为text/html或application/xhtml+xml的响应。
HoneypotViewMiddleware确保对视图request.POST的所有传入post请求都包含由HONEYPOT_FIELD_NAME、HONEYPOT_VALUE和HONEYPOT_VERIFIER设置定义的有效蜜罐字段。结果与项目中的每个视图都用@check_honeypot修饰一样。
HoneypotMiddleware是一个组合的中间件,它同时应用HoneypotResponseMiddleware和HoneypotViewMiddleware,这是获得整个站点范围内的蜜罐字段的最简单方法,可以在许多情况下使用,即使不是大多数情况下也可以使用。
自定义蜜罐显示
Django Honeypot使用了两个模板,可用于控制Honeypot功能如何呈现给用户的各个方面。
honeypot/honeypot_field.html用于呈现蜜罐字段。它有两个上下文变量fieldname和value,对应于HONEYPOT_FIELD_NAME和HONEYPOT_VALUE或任何有效的重写(例如传递给模板标记的自定义字段名)。
honeypot/honeypot_error.html是截获错误请求时呈现的错误页。给定上下文变量fieldname表示蜜罐字段的名称。