Django honey pot字段工具
项目描述
Django应用程序,提供用于防止自动表单垃圾邮件的工具。
提供模板标签、视图装饰器和中间件,用于向表单添加和验证蜜罐字段。
由James Turk编写,并由Flavio Curella和Daniel Greenfeld贡献。
来源: https://github.com/jamesturk/django-honeypot/
要求
python >= 3.8
django >= 3.2
用法
settings.py
确保在settings.py中将honeypot添加到INSTALLED_APPS中。
您几乎总是需要定义HONEYPOT_FIELD_NAME,即用于蜜罐字段的名称。一些复杂的机器人会尝试避免名为 honeypot 的字段,因此将字段命名为更现实的名称(如“phonenumber”或“body2”)可能更明智。
HONEYPOT_VALUE是一个选项,您可以使用它来填充蜜罐字段。默认情况下,蜜罐字段将为空,任何输入到其中的文本都将导致POST失败。HONEYPOT_VALUE可以是一个字符串或一个不带参数的可调用对象。
HONEYPOT_VERIFIER 是一个高级选项,您可以通过它来验证蜜罐。默认验证器确保蜜罐字段的内 容与 HONEYPOT_VALUE 匹配。通过结合 HONEYPOT_VALUE 和 HONEYPOT_VERIFIER 的可调用功能,可以实现更高级的技术,例如使用时间戳。
HONEYPOT_RESPONDER 可以用于在蜜罐无效时替换默认的响应。
将蜜罐字段添加到特定表单和视图中
您可以将蜜罐字段添加到特定表单中,并确保特定视图检查 request.POST 中的有效蜜罐。这可以通过使用 render_honeypot_field 模板标签来完成。
在模板文件顶部包含以下行:
{% load honeypot %}
然后在任何表单中包含以下标签:
{% render_honeypot_field "field_name" %}
将渲染一个默认隐藏的蜜罐字段“field_name”。如果未提供,蜜罐字段的名称将默认为 HONEYPOT_FIELD_NAME。
为了确保蜜罐字段既存在又正确,您需要使用来自 honeypot.decorators 的 check_honeypot 装饰器。
from honeypot.decorators import check_honeypot
@check_honeypot(field_name='hp_field_name')
def post_comment(request):
...
@check_honeypot
def other_post_view(request):
...
该装饰器将确保在 request.POST 中存在一个名为“field_name”的字段。@check_honeypot 无参数时将使用默认的 HONEYPOT_FIELD_NAME。
将蜜罐字段添加到基于类的视图中
与 将蜜罐字段添加到特定表单和视图 相同,但将装饰器添加到 post 方法中,使用 django 的 method_decorator。
from django.utils.decorators import method_decorator
from honeypot.decorators import check_honeypot
@method_decorator(check_honeypot, name='post')
class MyView(FormView):
...
在全局范围内添加蜜罐字段
有时您可能希望将蜜罐添加到网站上的所有表单中。这对于处理渲染自己的表单的应用程序尤其有用。为此,提供了三个中间件,其功能类似于 django 自身的 CSRF 中间件。
所有这些中间件都位于 honeypot.middleware 中。
HoneypotResponseMiddleware 分析所有响应的输出,并将使用 method="POST" 的任何表单重写为包含蜜罐字段,就像它们以 {% render_honeypot_field %} 开始一样。从 django.contrib.csrf.middleware.CsrfResponseMiddleware 中大量借鉴,此中间件仅重写具有内容类型 text/html 或 application/xhtml+xml 的响应。
HoneypotViewMiddleware 确保对于所有传入的 POST 请求到视图,request.POST 包含一个有效的蜜罐字段,该字段由 HONEYPOT_FIELD_NAME、HONEYPOT_VALUE 和 HONEYPOT_VERIFIER 设置定义。结果是,如果每个视图都使用 @check_honeypot 装饰器,效果相同。
HoneypotMiddleware 是一个结合中间件,它应用了 HoneypotResponseMiddleware 和 HoneypotViewMiddleware,这是在全局范围内获取蜜罐字段的简单方法,可以在许多(如果不是大多数)情况下使用。由于中间件更改了响应,因此需要在中 CommonMiddleware 后列出。如果将其列在 CommonMiddleware 之前,则 Content-Length 标头将不会反映更改。
自定义蜜罐显示
django-honeypot 使用两个模板来控制如何将蜜罐功能呈现给用户的各种方面。
honeypot/honeypot_field.html 用于渲染蜜罐字段。它提供了两个上下文变量 fieldname 和 value,分别对应于 HONEYPOT_FIELD_NAME 和 HONEYPOT_VALUE 或任何有效的覆盖(例如传递给模板标记的自定义字段名)。
honeypot/honeypot_error.html 是在拦截到恶意请求时渲染的错误页面。它提供了一个表示蜜罐字段名称的上下文变量 fieldname。
要完全更改错误页面或在拦截到恶意请求时发生的操作,请将 HONEYPOT_RESPONDER 设置为接受 request 和 context 关键字参数并返回 HttpResponse 的函数。
# mypackage.py
from honeypot.decorators import honeypot_error
def custom_honeypot_error(request, context):
# custom responder logging the event
log.warning("gotcha!")
# call built-in responder to send default HttpResponseBadRequest
return honeypot_error(request, context)
# or ...
# raise Http404
# settings.py
from django.utils.module_loading import import_string
HONEYPOT_RESPONDER = import_string('mypackage.custom_honeypot_error')
django_honeypot-1.2.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | ab5c2aad214d86def2f00f6a79aa14f171db7301ac8712f20dc21a83dd5d6413 |
|
MD5 | 5fbc9bd5ece7f217754cd931c5acdaaa |
|
BLAKE2b-256 | e28f0bcf3f10ec08720086ab625dddfa061f8534cf06b16eb7567b0cc9242f4f |
django_honeypot-1.2.1-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | fdabe4ded66b6db25d04af2446de3bf7cb047cb5db097a864c8c97b081ef736f |
|
MD5 | 5cca0df82717506fc3d70f8f1cef09ba |
|
BLAKE2b-256 | 0cc96372492315f3c219c81fb711769bc9522a9bbe90d96eed3114270eec6635 |