跳转到主要内容

使用IP白名单支持隐藏您的Django站点在基本认证机制之后。

项目描述

GitHub actions CI status https://img.shields.io/pypi/v/django-basic-auth-ip-whitelist.svg https://img.shields.io/pypi/dm/django-basic-auth-ip-whitelist.svg

这个简单的软件包提供中间件,让您可以通过Django设置设置基本认证和IP白名单。

用例

这个软件包是为那些需要完全隐藏在互联网后面或仅对特定IP网络可访问的测试和演示站点而创建的。

不要依赖于这个包来保护高度敏感的信息。这个包可以作为防止预发布站点被搜索引擎和尝试访问预发布站点的互联网用户发现的一种方法。建议使用Django认证系统来保护任何敏感信息。

要求

  • Django 1.8, 1.9, 1.10, 1.11, 2.0, 2.1, 2.2或3.0。

  • Python 3.4, 3.5, 3.6, 3.7或3.8。

安装

这个包位于PyPI上,所以您只需使用pip安装它。

pip install django-basic-auth-ip-whitelist

配置

在您的Django设置中,您可以配置以下设置

BASIC_AUTH_LOGINBASIC_AUTH_PASSWORD

您想要与基本认证一起使用的凭证。

BASIC_AUTH_WHITELISTED_IP_NETWORKS

设置一个与Python的ipaddress.ip_network兼容的网络范围列表(字符串),您想要能够不经过认证即可访问网站。它必须是一个用逗号分隔网络的字符串或Python可迭代对象。

警告:有关IP地址检测的注意事项,请参阅下面的[获取IP地址](#getting-ip-address)。

BASIC_AUTH_REALM

指定默认响应的区域。

示例设置

MIDDLEWARE += [
    'baipw.middleware.BasicAuthIPWhitelistMiddleware'
]
BASIC_AUTH_LOGIN = 'somelogin'
BASIC_AUTH_PASSWORD = 'greatpassword'
BASIC_AUTH_WHITELISTED_IP_NETWORKS = [
    '192.168.0.0/28',
    '2001:db00::0/24',
]

高级自定义

获取IP地址

默认情况下,BasicAuthIPWhitelistMiddleware使用request.META["REMOTE_ADDR"]作为客户端的IP,这对应于连接到Django的IP地址。如果您有一个反向代理(例如前面的nginx),这将导致nginx的IP地址,而不是客户端的IP地址。

正确确定IP地址的方法可能因部署而异。错误猜测可能导致安全问题。相反,这个库要求您自己进行配置。

在大多数部署中,可以使用X-Forwarded-For头正确确定客户端的IP。我们建议使用django-xff来帮助正确解析此头。因为django-xff默认覆盖REMOTE_ADDR,它由BasicAuthIPWhitelistMiddleware原生支持。

django-ipware是另一个流行的库,但可能需要更多自定义才能实现。

要完全自定义IP地址检测,您可以设置BASIC_AUTH_GET_CLIENT_IP_FUNCTION为一个函数,该函数接收一个请求并返回一个有效的IP地址

BASIC_AUTH_GET_CLIENT_IP_FUNCTION = 'utils.ip.get_client_ip'

BASIC_AUTH_WHITELISTED_HTTP_HOSTS

设置一个列表,列出您的网站将开放的没有基本认证的主机。如果您希望您的网站在多个域名下托管,并且只想让其中一个对公众可见,例如通过搜索引擎,这很有用。

这绝对不是一个安全功能。请不要用它来保护您的网站。

BASIC_AUTH_WHITELISTED_HTTP_HOSTS = [
    'your-public-domain.com',
]

BASIC_AUTH_WHITELISTED_PATHS

设置一个列表,列出您的网站将提供没有基本认证的路径。这可以用来支持API集成,例如与不支持基本认证的第三方服务。

在设置BASIC_AUTH_WHITELISTED_PATHS中列出的路径被视为根,任何子路径也将被列入白名单。例如

BASIC_AUTH_WHITELISTED_PATHS = [
    '/api',
]

这将打开路径https://mydomain.com/api/,以及任何其下的路径,例如https://mydomain.com/api/document/1/

BASIC_AUTH_RESPONSE_TEMPLATE

如果您想在不同页面显示不同的模板,请使用此设置来指向模板。

BASIC_AUTH_RESPONSE_TEMPLATE = '401.html'

BASIC_AUTH_RESPONSE_CLASS

如果您想指定自定义响应类,可以使用此设置。提供路径作为字符串。

BASIC_AUTH_RESPONSE_CLASS = 'yourmodule.response.CustomUnathorisedResponse'

BASIC_AUTH_DISABLE_CONSUMING_AUTHORIZATION_HEADER

将此设置设为True,如果希望在授权HTTP头被此包的中间件使用后,不要从请求对象中删除。

BASIC_AUTH_DISABLE_CONSUMING_AUTHORIZATION_HEADER = True

跳过中间件

您可以通过将请求上的_skip_basic_auth_ip_whitelist_middleware_check属性设置为True来跳过中间件。

setattr(request, '_skip_basic_auth_ip_whitelist_middleware_check', True)

如果您想与其他中间件共存,同时限制对网站的访问,这可能很有用。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

django_basic_auth_ip_whitelist-0.6.0.tar.gz (8.6 kB 查看哈希值)

上传时间

构建分发

django_basic_auth_ip_whitelist-0.6.0-py3-none-any.whl (8.5 kB 查看哈希值)

上传时间 Python 3

支持者