使用IP白名单支持隐藏您的Django站点在基本认证机制之后。
项目描述
这个简单的软件包提供中间件,让您可以通过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_LOGIN和BASIC_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'
跳过中间件
您可以通过将请求上的_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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 51fbef4d483cfccb15d0c38605fd149fd307314ad8a9308580a6b693b94b3329 |
|
MD5 | 82e7a9b278bd9edca8a95f7d3246fd5d |
|
BLAKE2b-256 | e000ca5e42ef76363ae9925e0e14a6e0a45885ff2232bb012f8c757584442061 |
django_basic_auth_ip_whitelist-0.6.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f866c1822861ab6612efb9adec03b12279a82314783aa721c843acfbea04b0b7 |
|
MD5 | 9d572ad625e001bfce085c3dacf72f8e |
|
BLAKE2b-256 | 15961905aa2ae964a2df058215f44eef6850142ecd41b09b26bff74d4faeb1b5 |