Django蜜罐现场公用设施

django-honeypot的Python项目详细描述


https://travis-ci.org/jamesturk/django-honeypot.svg?branch=masterhttps://img.shields.io/pypi/v/django-honeypot.svg

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_VALUEHONEYPOT_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_NAMEHONEYPOT_VALUEHONEYPOT_VERIFIER设置定义的有效蜜罐字段。结果与项目中的每个视图都用@check_honeypot修饰一样。

HoneypotMiddleware是一个组合的中间件,它同时应用HoneypotResponseMiddlewareHoneypotViewMiddleware,这是获得整个站点范围内的蜜罐字段的最简单方法,可以在许多情况下使用,即使不是大多数情况下也可以使用。

自定义蜜罐显示

Django Honeypot使用了两个模板,可用于控制Honeypot功能如何呈现给用户的各个方面。

honeypot/honeypot_field.html用于呈现蜜罐字段。它有两个上下文变量fieldnamevalue,对应于HONEYPOT_FIELD_NAMEHONEYPOT_VALUE或任何有效的重写(例如传递给模板标记的自定义字段名)。

honeypot/honeypot_error.html是截获错误请求时呈现的错误页。给定上下文变量fieldname表示蜜罐字段的名称。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
eclipse如何使用getter和setter调试java代码?   java如何使用HashMap作为LinkedHashSet   安卓 java。lang.RuntimeException:无法启动活动组件信息{..}JAVAlang.NullPointerException   使用二进制堆和比较器的Remove()存在循环问题   java在两个数组中查找匹配的数字   Maven exec可以工作,但java jar不能   java SQLite数据库未显示在文件资源管理器中   java Android Studio下一页按钮不工作   java为什么启用某些异常的调试要慢得多?   java如何在测试中注入bean的属性源   java如何预加载Android inapp计费购买   java使用CSS选择器在特定实例上单击按钮   java在Spring Boot中使用生成的ID持久化一个OneToMany实体   作用域如果我在java方法中声明一个变量,该变量是否也可以被从声明该变量的方法调用的任何方法访问?   本机JNIC代码中的java Openssl同步   java没有规则使目标“external/obpermissionjar/javalib/obpermissionjarPro20160628_1.0.9”为..所需。。?   java计算人口密度:初学者指南   java如何检查书签是否包含表?   java在Spring应用程序中设置时区