能否盲目信任Django提示的“需将xxx添加到ALLOWED_HOSTS”错误?
问题解答
Invalid HTTP_HOST header: '139.162.113.11'. You may need to add '139.162.113.11' to ALLOWED_HOSTS.
这个报错是Django自带的ALLOWED_HOSTS安全机制的正常触发结果,你当前的配置已经成功拦截了这类非法请求,服务器运行没有问题。
关于IP来源与风险判断
这类陌生IP的HOST头请求绝大多数是公网自动化扫描工具发起的,属于公网服务器的常态现象:
- 扫描工具会遍历所有公开的IP段,直接用IP作为HOST头发起请求,目的是排查存在配置漏洞的站点、挖掘已知框架漏洞,和你的服务器部署地、面向用户群体没有关联,示例中东京的IP就是这类扫描节点的地址。
- 你不需要将这类IP加入
ALLOWED_HOSTS,加入后反而会让这类非法请求进入应用业务逻辑,提升被攻击的风险。
正确处理方式
- 确认你的
ALLOWED_HOSTS配置仅包含你实际对外提供服务的域名,生产环境禁止设置为*,也不要添加任何非你可控的IP/域名。 - 调整日志配置过滤无效报错,避免日志被这类请求刷满。你可以在Django的
settings.py中加入如下日志规则,过滤DisallowedHost类的警告:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'filters': { 'ignore_disallowed_host': { '()': 'django.utils.log.CallbackFilter', 'callback': lambda record: record.name != 'django.security.DisallowedHost', } }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'filters': ['ignore_disallowed_host'], }, }, 'root': { 'handlers': ['console'], 'level': 'WARNING', } }
- 如果这类请求量过大,直接在接入层拦截。你可以在Nginx、CDN等接入层配置规则,所有HOST头不是你业务域名的请求直接返回444/403,不需要转发到后端Django应用,从源头减少无效请求的资源消耗。
- 如果单个IP的扫描频率过高,已经影响正常服务,可以通过防火墙规则临时拉黑该IP/IP段,一般情况下不需要做额外处理,公网常规扫描不会对正常配置的站点造成安全威胁。
内容的提问来源于stack exchange,提问作者Emilio Conte
相关产品推荐
相关产品推荐

