成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > Django給表單添加honeypot驗(yàn)證增加安全性

Django給表單添加honeypot驗(yàn)證增加安全性

熱門標(biāo)簽:幫人做地圖標(biāo)注收費(fèi)算詐騙嗎 溫州旅游地圖標(biāo)注 遼寧400電話辦理多少錢 荊州云電銷機(jī)器人供應(yīng)商 江蘇房產(chǎn)電銷機(jī)器人廠家 蘇州電銷機(jī)器人十大排行榜 電信營業(yè)廳400電話申請(qǐng) 悟空智電銷機(jī)器人6 外呼不封號(hào)系統(tǒng)

如果你的網(wǎng)站中允許匿名用戶通過POST方式提交表單, 比如用戶注冊(cè)表, 評(píng)論表或者留下用戶聯(lián)系方式的表單,你一定要防止機(jī)器人或爬蟲程序惡意提交大量的垃圾數(shù)據(jù)到你的數(shù)據(jù)庫中。這種情況不是可能會(huì)發(fā)生,而是一定會(huì)發(fā)生。一種解決這種問題的方式就是在表單中加入人機(jī)交互驗(yàn)證碼(CAPTCHA), 另一種方式就是在表單中加入honeypot隱藏字段,然后在視圖中對(duì)隱藏字段的值進(jìn)行驗(yàn)證。兩種驗(yàn)證方式的目的都是一樣,防止機(jī)器人或程序通過偽裝成人來提交數(shù)據(jù)。今天我們就來詳細(xì)介紹下如何在表單中添加honeypot增加安全性。

Honeypot的工作原理

Honeypot又名蜜罐,其實(shí)本質(zhì)上是種陷阱。我們?cè)诒韱沃泄室馔ㄟ^CSS隱藏一些字段, 這些字段一般人是不可見的。然而機(jī)器人或程序會(huì)以為這些字段也是必需的字段(required), 所以會(huì)補(bǔ)全后提交表單,這就中了我們的陷阱。在視圖中我們可以通過裝飾器對(duì)用戶提交的表單數(shù)據(jù)進(jìn)行判斷,來驗(yàn)證表單的合法性。比如honeypot字段本來應(yīng)該為空的,現(xiàn)在居然有內(nèi)容了,顯然這是機(jī)器人或程序提交的數(shù)據(jù),我們可以拒絕其請(qǐng)求。

Django中如何實(shí)現(xiàn)表單honeypot驗(yàn)證?

Django表單中添加honeypot,一共分兩步:

1. 編寫模板標(biāo)簽(templatetags),在包含模板的表單中生成honeypot字段。

2. 編寫裝飾器(decorators.py), 對(duì)POST請(qǐng)求發(fā)送來的表單數(shù)據(jù)進(jìn)行驗(yàn)證。

由于honeypot的功能所有app都可以用到,我們創(chuàng)建了一個(gè)叫common的app。整個(gè)項(xiàng)目的目錄結(jié)構(gòu)如下所示。只有標(biāo)藍(lán)色的4個(gè)文件,是與honeypot相關(guān)的。

編寫模板標(biāo)簽

我們?cè)赾ommon目錄下新建templatetags目錄(包含一個(gè)空的__init__.py),然后在新建common_tags_filters.py, 添加如下代碼。

from django import template
from django.conf import settings
from django.template.defaultfilters import stringfilter


register = template.Library()


# used to render honeypot field
@register.inclusion_tag('common/snippets/honeypot_field.html')
def render_honeypot_field(field_name=None):
    """
        Renders honeypot field named field_name (defaults to HONEYPOT_FIELD_NAME).
    """
    if not field_name:
        field_name = getattr(settings, 'HONEYPOT_FIELD_NAME', 'name1')
    value = getattr(settings, 'HONEYPOT_VALUE', '')
    if callable(value):
        value = value()
    return {'fieldname': field_name, 'value': value}

我們現(xiàn)在來看下上面這段代碼如何工作的。我們創(chuàng)建了一個(gè)名為render_honeypot_field的模板標(biāo)簽,用于在模板中生成honeypot字段。honeypot字段名是settings.py里HONEYPOT_FIELD_NAME,如果沒有此項(xiàng)設(shè)置,默認(rèn)值為name1。honeypot字段的默認(rèn)值是HONEYPOT_VALUE, 如果沒有此項(xiàng)設(shè)置,默認(rèn)值為空字符串''。然后這個(gè)函數(shù)將fieldname和value傳遞給如下模板片段。

# common/snippets/honeypot_field.html

div class="form-control" style="display: none;">
        label>input type="text" name="{{ fieldname }}" value="{{ value }}" />
    /label>
/div>

在Django模板的表單中生成honeypot字段只需按如下操作:

{% load common_tags_filters %}
{% load static %}

form method="post" action="">
     {% csrf_token %}
    {% render_honeypot_field %}
    {% form.as_p %}
/form>

編寫裝飾器

在common文件下新建decorators.py, 添加如下代碼。我們編寫了check_honeypot和honeypot_exempt兩個(gè)裝飾器,前者給需要對(duì)honeypot字段進(jìn)行驗(yàn)證的視圖函數(shù)使用,后者給不需要對(duì)honeypot字段進(jìn)行驗(yàn)證的視圖函數(shù)使用。

#common/decorators.py

from functools import wraps
from django.conf import settings
from django.http import HttpResponseBadRequest, HttpResponseForbidden, HttpResponseRedirect
from django.template.loader import render_to_string
from django.contrib.auth.decorators import user_passes_test


def honeypot_equals(val):
    """
        Default verifier used if HONEYPOT_VERIFIER is not specified.
        Ensures val == HONEYPOT_VALUE or HONEYPOT_VALUE() if it's a callable.
    """
    expected = getattr(settings, 'HONEYPOT_VALUE', '')
    if callable(expected):
        expected = expected()
    return val == expected


def verify_honeypot_value(request, field_name):
    """
        Verify that request.POST[field_name] is a valid honeypot.
        Ensures that the field exists and passes verification according to
        HONEYPOT_VERIFIER.
    """
    verifier = getattr(settings, 'HONEYPOT_VERIFIER', honeypot_equals)
    if request.method == 'POST':
        field = field_name or settings.HONEYPOT_FIELD_NAME
        if field not in request.POST or not verifier(request.POST[field]):
            response = render_to_string('common/snippets/honeypot_error.html',
                                    {'fieldname': field})
            return HttpResponseBadRequest(response)


def check_honeypot(func=None, field_name=None):
    """
        Check request.POST for valid honeypot field.
        Takes an optional field_name that defaults to HONEYPOT_FIELD_NAME if
        not specified.
    """
    # hack to reverse arguments if called with str param
    if isinstance(func, str):
        func, field_name = field_name, func

    def wrapper(func):
        @wraps(func)
        def inner(request, *args, **kwargs):
            response = verify_honeypot_value(request, field_name)
            if response:
                return response
            else:
                return func(request, *args, **kwargs)
        return inner

    if func is None:
        def decorator(func):
            return wrapper(func)
        return decorator

    return wrapper(func)


def honeypot_exempt(func):
    """
        Mark view as exempt from honeypot validation
    """
    # borrowing liberally from django's csrf_exempt
    @wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    wrapper.honeypot_exempt = True
    return wrapper

上面代碼最重要的就是verify_honeypot_value函數(shù)了。如果用戶通過POST方式提交的表單里沒有honeypot字段或該字段的值不等于settings.py中的默認(rèn)值,則驗(yàn)證失敗并返回如下錯(cuò)誤:

# common/snippets/honeypot_error.html

!DOCTYPE html>
html lang="en">
    body>
    h1>400 Bad POST Request/h1>
    p>We have detected a suspicious request. Your request is aborted./p>
    /body>
/html>

定義好裝飾器后,我們對(duì)需要處理POST表單的視圖函數(shù)加上@check_honeypot就行了,是不是很簡單?

from common.decorators import check_honeypot


@check_honeypot
def signup(request):
    if request.method == "POST":
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return HttpResponseRedirect(reverse('users:profile'))
    else:
        form = SignUpForm()

    return render(request, "users/signup.html", {"form": form, })

參考

本文核心代碼參考了James Sturk的Django-honeypot項(xiàng)目。原項(xiàng)目地址如下所示:

https://github.com/jamesturk/django-honeypot/

以上就是Django給表單添加honeypot驗(yàn)證增加安全性的詳細(xì)內(nèi)容,更多關(guān)于Django 添加honeypot驗(yàn)證的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Django表單外鍵選項(xiàng)初始化的問題及解決方法
  • django表單中的按鈕獲取數(shù)據(jù)的實(shí)例分析
  • Django def clean()函數(shù)對(duì)表單中的數(shù)據(jù)進(jìn)行驗(yàn)證操作
  • Django 構(gòu)建模板form表單的兩種方法
  • Django form表單與請(qǐng)求的生命周期步驟詳解
  • Django model.py表單設(shè)置默認(rèn)值允許為空的操作
  • Django表單提交后實(shí)現(xiàn)獲取相同name的不同value值
  • Django框架獲取form表單數(shù)據(jù)方式總結(jié)
  • django之從html頁面表單獲取輸入的數(shù)據(jù)實(shí)例
  • 解決django中form表單設(shè)置action后無法回到原頁面的問題
  • django-xadmin根據(jù)當(dāng)前登錄用戶動(dòng)態(tài)設(shè)置表單字段默認(rèn)值方式

標(biāo)簽:三沙 黃山 臺(tái)灣 宿遷 景德鎮(zhèn) 濟(jì)南 喀什 欽州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Django給表單添加honeypot驗(yàn)證增加安全性》,本文關(guān)鍵詞  Django,給,表單,添加,honeypot,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Django給表單添加honeypot驗(yàn)證增加安全性》相關(guān)的同類信息!
  • 本頁收集關(guān)于Django給表單添加honeypot驗(yàn)證增加安全性的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    av国产在线观看| 亚洲区欧美区| 男人的天堂免费在线视频| av高清不卡在线| 小次郎av收藏家| 91人成在线| 中文字幕免费在线观看视频| 亚洲欧美日韩在线观看a三区| 久久久久久亚洲av无码专区| 欧美精品在线一区二区三区| 成年网站在线观看视频| 国产精品国产精品| 国产真实乱在线更新| а 天堂 在线| 在线视频2区| 中文字幕在线2019| 91精品久久久久久久久青青| 久草在线新资源| 中文天堂在线一区| 视频在线观看免费影院欧美meiju| 亚洲人成77777男人| 日本国产欧美一区二区三区| 国产精品mp4| 欧美一级欧美一级| 亚洲欧美国产一区二区三区| 亚洲图片欧美一区| h片在线观看网站| 日韩欧美国产一区二区在线播放| 色一色在线观看视频网站| 国产精品自在欧美一区| 乱亲女秽乱长久久久| 亚洲图片88| 国产精品igao视频| 成全视频在线播放大地| 色综合久久五月| 国产经典三级在线| 亚洲精品综合在线| 日韩毛片在线一区二区毛片| xxx欧美精品| 性一交一乱一乱一视频| 麻豆映画在线观看| 欧美日韩一区二区三区在线电影| 日本a在线免费观看| 国产精品日韩久久久久| 亚洲精品自产拍在线观看app| 丝袜脚交一区二区| 欧美一区二区三区免费观看| 91制片厂免费观看| 亚州av电影免费在线观看| 国产欧美日韩视频一区二区| 亚洲欧洲一区二区在线播放| 国产一级做a爰片久久| 国产美女诱惑一区二区| 激情视频免费| 国产精品美女久久久久av爽李琼| 日韩免费不卡视频| 欧美顶级毛片在线播放| 四虎成人精品一区二区免费网站| 日韩一级片免费观看| 蜜桃传媒视频麻豆第一区免费观看| 色婷婷精品久久二区二区密| 69中国xxxxxxxxx69| 日本亚洲精品在线观看| 午夜视频一区在线观看| 欧美国产三级| 国产一区视频在线观看免费| a美女胸又www黄视频久久| 999视频在线免费观看| 黄色一级大片在线免费看国产一| 欧美激情一区二区视频| 综合视频在线| 又黄又湿又爽又免费又色| 精品人妻一区二区三区日产乱码| 四虎激情影院| 99久久免费国产精品| 亚洲激情一二三区| 久久亚洲一区二区三区明星换脸| 精品成人无码久久久久久| 久久久久久久久久91| 国产精品性做久久久久久| 欧美成人精品一区二区免费看片| 一区二区三区在线观看国产| 日韩在线观看一区二区三区| 你懂的视频在线| 日韩视频一区二区| www.成人在线.com| 亚洲福利av在线| 中文字幕视频一区二区| 国产女优在线播放| 欧美一级黄色网| 欧美在线三级电影| free性丰满69性欧美| av色资源站| 91蝌蚪porny九色| 日本精品一区二区三区在线观看视频| www.国产在线视频| 免费久久一级欧美特大黄| 成人乱色短篇合集| 亚洲综合久久网| 欧美视频一二三| 在线看片欧美| 久久99精品久久久久久久久久久久| 日韩精品免费综合视频在线播放| 一级特黄色大片| 最新高清无码专区| wwwwxxxx国产| 草裙成人精品一区二区三区| 97操碰视频| 亚洲成人自拍偷拍| 中文字幕av一区二区三区高| 国产精品8888| 香蕉视频网站在线| 中文字幕有码在线播放| 亚洲精品电影网站| 色与欲影视天天看综合网| 天堂网在线观看在线观看精品| 色视频www在线播放国产成人| 一区二区成人在线视频| 一区二区三区四区精品| 亚洲最大福利视频网| 国产欧美日韩一区二区三区| 在线视频一二三区| 波多野结衣视频网址| 高清在线视频日韩欧美| 亚洲成人亚洲激情| 久久综合九九| 国产精品亚洲欧美日韩一区在线| 久久久这里只有精品视频| 天天操天天干天天摸| 日本高清不卡三区| 色欲av无码一区二区三区| av网站免费在线看| 欧美日韩国产精品一区二区三区四区| 日韩在线综合| 亚洲天堂成人av| 你懂的好爽在线观看| 牛牛精品一区二区| 男人的天堂99| 免费精品一区二区三区在线观看| 亚洲人成免费网站| 国产精品人人做人人爽人人添| 97精品人妻一区二区三区| 99中文字幕在线观看| 亚洲国产人成综合网站| 日本老熟俱乐部h0930| 久久久久久久片| 国产精品成人在线| 欧美男男gaytwinkfreevideos| 午夜精品无码一区二区三区| 微拍福利一区二区| 成人爽a毛片一区二区| 亚洲精品视频一二三区| 不卡的av电影| 中文字幕在线播放一区二区| 99热这里只有精| 欧美丰满老妇厨房牲生活| 五级黄高潮片90分钟视频| 免费看黄在线看| 欧美一区二区三区高清视频| 亚洲伦理一区二区| 成人精品在线观看| 黄色高清视频在线观看| 可以看av的网站久久看| 手机看片国产精品| 97免费视频观看| 在线播放的av| 国产色在线观看| 亚洲第一精品夜夜躁人人爽| 91在线播放网站| 久热精品视频在线观看| 人妻激情偷乱频一区二区三区| 国产农村妇女精品久久| 深夜福利视频网站| 国产一级片麻豆| 婷婷亚洲五月| 中文字幕av一区二区三区谷原希美| 欧美日韩一区自拍| 日韩大片b站免费观看直播| 亚洲一二三四久久| 日本激情免费| 国产欧美日韩一区二区三区在线| 国产欧美日韩亚洲精品| 午夜免费激情视频| 天涯成人国产亚洲精品一区av| 寂寞少妇一区二区三区| 国产麻豆电影在线观看| 91视频xxxx| 亚洲天堂网中文字| 亚洲欧美网站| 国产在线观看av| 少妇无码av无码专区在线观看| 日韩在线观看一区二区| 在线看片线路1| 一级特黄毛片| 日本黄色一区二区三区| 欧美唯美清纯偷拍| 国产日本欧洲亚洲| 天天躁日日躁狠狠躁免费麻豆| 国产欧美日韩视频在线观看| 成熟亚洲日本毛茸茸凸凹| 国产精品视频流白浆免费视频| 国产91麻豆视频| 亚洲视频在线观看一区二区三区| 国产精品一区二区在线播放| 亚洲pron| 成人综合社区| 男人看的污网站| 欧美一区二区精品久久911| 免费观看亚洲| 日韩av免费在线| 69av在线播放| 99re免费99re在线视频手机版| 欧美日韩亚洲综合在线| 国产女主播在线一区二区| ass精品国模裸体欣赏pics| 日韩av在线中文字幕| 成人午夜毛片| av在线播放天堂| 黄色的视频在线免费观看| 亚洲精品成a人在线观看| 日韩一级裸体免费视频| 国产精品成人a在线观看| 欧美人与禽zozo性伦| 天天舔天天干| 一本久道久久综合无码中文| 87福利电影网| 亚洲一区av在线播放| 日韩电影在线一区二区三区| 97蝌蚪自拍自窝| 亚洲激情婷婷| 成人天堂yy6080亚洲高清| 亚洲欧洲日韩在线| 可以直接看的无码av| 国产日韩高清一区二区三区在线| 91午夜视频在线观看| 在线免费av网址| 国产视频久久久久久| 日韩免费观看一区二区| 无码精品人妻一区二区三区影院| 一区二区三区中文字幕| 久久综合久久综合亚洲| 久久精品欧美一区二区三区麻豆| 尤物免费看在线视频| 亚洲欧美综合自拍| 日本亚洲三级在线| 99精品免费在线观看| 草久视频在线观看| 最近的中文字幕在线看视频| 欧美色成人综合| 久久青青草综合| 性高潮久久久久久久久| 亚洲一区bb| 成人国产激情在线| 久久精品国产99国产精品澳门| 内射中出日韩无国产剧情| 国产成人超碰人人澡人人澡| 天天干天天草天天| 97香蕉久久超级碰碰高清版| 欧美高清69hd| 中文字幕av观看| 国产精品免费一区二区三区| av在线电影观看| 久久久久久久久久久99| 91老师片黄在线观看| 中文字幕精品一区二区精品绿巨人| 亚洲欧美综合色| 久久精品日产第一区二区三区精品版| 好吊的妞视频这里都有| 国产一区二区三区av电影| 欧美电影一二区| 成 人免费视频播放| 亚洲不卡av一区二区三区| 精品爽片免费看久久| 久久国产中文字幕| 日韩精品免费一区二区| 欧美成年人视频| 欧美大片大片在线播放| 国产农村妇女精品| 伊人免费在线观看| 欧美黑人xxxⅹ高潮交| www.综合网.com| 爱啪导航一精品导航站| 99国产精品免费视频观看| 国产精品99久久99久久久| 亚洲人成在线播放网站岛国| 国产精品人人做人人爽人人添| 日韩精品――中文字幕| 日韩欧美中文免费| 国内黄色精品| 久久草视频在线看| 日韩精品成人免费观看视频| 国产成人av福利| 999av小视频在线| 无码人妻精品一区二区三区在线| 在线电影中文日韩| 国产精品一区二区av影院萌芽| 欧美色综合影院| 国产一区二区视频在线| 国产一区精品在线| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 亚洲综合999| 精品国产91亚洲一区二区三区婷婷| 高清av电影在线观看| 欧美成人免费视频a| jizz国产精品| www.狠狠干| 黄网址在线永久免费观看| 国产毛片一区二区三区| 99精品欧美一区二区三区小说| 精品一区二区三区在线观看| 国产 日韩 欧美一区| 一区二区三区中文字幕精品精品| 99精品欧美一区二区三区| 丝袜制服一区二区三区| 精品写真视频在线观看| 超薄肉色丝袜足j调教99| 欧美成人亚洲成人| 亚洲成人激情av| 欧美一区三区二区| av黄色一级片| 国产欧美日韩伦理| 国产精品va在线播放我和闺蜜| 波多野结衣办公室33分钟| 国产在线视频你懂的| 国产成人在线视频免费播放| 看片网站欧美日韩| 久久一本综合频道| 日韩av成人|