Django的黑名单用户和主机。自动将ratelimited客户端列入黑名单。基于djangoblacklist

django-axiioss-blacklist的Python项目详细描述


Django黑名单

Django的黑名单用户和主机。自动黑名单费率有限的客户。基于django-blacklist

概述

Django黑名单允许您阻止特定用户和IP地址/网络访问您的应用程序。 可以从管理界面手动阻止客户端,也可以在超过请求速率限制后自动阻止客户端。 黑名单规则适用于特定的持续时间。 黑名单具有很强的可伸缩性,并且在应用时不会对大量规则造成明显的开销。在

安装

要安装软件包,请运行:

$ pip install django-axiioss-blacklist

blacklist应用程序添加到INSTALLED_APPS

^{pr2}$

AuthenticationMiddleware之后添加blacklist_middleware中间件:

MIDDLEWARE = [
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'blacklist.middleware.blacklist_middleware',
    ...
]

应用黑名单数据库迁移:

$ python manage.py migrate blacklist

使用

您可以从管理员管理黑名单规则。 更改在可配置的时间后生效,或在服务器重新启动时生效。 规则可以针对用户或IP地址。 您还可以通过指定可选的prefixlen字段(网络前缀位的数目)来定位IP网络(范围)。 每个规则都有特定的持续时间。在这个期限过后,规则将自动过期。 当请求因匹配规则而被阻止时:

  • 返回状态400(错误请求)。在
  • 将呈现错误模板。 您可以指定一个自定义的(见下文),也可以将其用于状态400。在
  • 记录一条消息 (对于自定义模板,来自记录器blacklist.middleware的警告,否则来自记录器django.security的错误)。在

正在删除过期的规则

过期的规则不会自动从数据库中删除。 可以使用包含的管理命令trim_blacklist清理它们:

$ python manage.py trim_blacklist [-c <created_days>] [-e <expired_days>]

选项-c和{}分别指定创建和过期的最小年龄。在

自动黑名单

超过指定的请求速率限制后,客户端可以自动被列入黑名单。 此功能需要django-ratelimit。在

首先,通过应用@ratelimit修饰符对视图进行速率限制。确保设置block=False。 然后,通过添加@blacklist_ratelimited修饰符将速率受限的客户端列入黑名单。指定黑名单持续时间。 例如:

from datetime import timedelta
from ratelimit.decorators import ratelimit
from blacklist.ratelimit import blacklist_ratelimited

@ratelimit(key='user_or_ip', rate='50/m', block=False)
@blacklist_ratelimited(timedelta(minutes=30))
def index(request):
    ...

自动规则立即生效。 如果请求来自经过身份验证的用户,则规则将针对该用户。 否则,它将以他们的IP地址为目标。在


注意:客户机IP地址取自REMOTE_ADDR值的request.META。 如果应用程序位于一个或多个反向代理之后,则默认情况下, 始终是最近代理的地址。 为了避免将所有客户机列入黑名单,可以从中间件中的X-Forwarded-For头设置REMOTE_ADDR。 但是,请记住,可以伪造此标头以绕过速率限制。 为此,您可以使用该头中的最后一个地址。 如果您在两个代理后面,请使用倒数第二个代理,等等


@blacklist_ratelimited接受两个参数:(duration, block=True)。在

  • duration可以是timedelta对象,也可以是两个独立持续时间的元组 (对于基于用户和基于IP的规则)。在
  • block指定是立即阻止请求,还是传递给视图。在

自动规则将有一个注释,其中包含请求的ID,该ID触发了规则的创建, 以及“请求热线”。 只有在可用时才添加请求ID。Django不生成请求id。 为此,您可以安装django-log-request-id。在

设置

  • BLACKLIST_ENABLE-是否应阻止列入黑名单的客户端, 并且速率受限的客户端应该被列入黑名单;默认值:True
  • BLACKLIST_RELOAD_PERIOD-重新加载黑名单的频率,以秒为单位;默认值:60
  • BLACKLIST_RATELIMITED_ENABLE-是否应自动将速率限制的客户列入黑名单; 需要BLACKLIST_ENABLE;默认值:True
  • BLACKLIST_TEMPLATE-要呈现给被阻止的客户端的自定义错误模板的名称; 它的上下文将包含requestexception; 设置为None将模板用于状态400;默认值:None

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

推荐PyPI第三方库


热门话题
字符串Java字母替换无效   java Spring Roo JPA MS SQL Server无法打开JPA EntityManager组织。冬眠例外GenericJDBCException:无法打开连接   在scala中使用JavaWS对大型数据文件进行java流式处理   Java编译器是否将字节和短字符识别为文本?   java无法查找符号错误,空指针   mongodb在Java中重用数据库连接   java将多个StringArray从字符串文件获取到活动中   java是一个变量,它只保存最后一次鼠标单击的坐标   c#尺寸有限;添加、删除和洗牌   java如何在Android中显示来自资产文件夹的文本文件中的文本   Android应用程序中的java Tensorflow Lite自定义对象检测模型错误   java如何在foreachloop中使用scanner将来自命令行的输入存储到数组中   java如何定义一个好的存储库接口   Android中的java解析动态json对象