来自探测黑客的 Django HTTP_HOST 错误,如何禁用此 500 错误?

Posted

技术标签:

【中文标题】来自探测黑客的 Django HTTP_HOST 错误,如何禁用此 500 错误?【英文标题】:Django HTTP_HOST error from probing hackers, how to disable this 500 error? 【发布时间】:2017-05-25 06:49:20 【问题描述】:

我收到一条错误消息发送到我的管理员电子邮件地址:

ADMIN = ['admin.error.email.here@domain.com'] email address.

此错误消息以大约每分钟两次的恒定速率出现。

我想停止发送到我的管理员电子邮件的所有 HTTP_HOST 错误消息,但同时仍收到 500 条错误消息。我查看了文档,找不到任何帮助。我在 Stack Overflow 上搜索,只发现将 nginx 80 端口服务器配置文件更改为包含头错误为 444 错误,从而绕过 500 错误报告。但是,这不起作用。

是否有任何setting.py 变量用于排除某些错误?时间至关重要——就像我说的那样,每分钟有 2 封该死的电子邮件来自某个拼命抓取数据的混蛋。这不是安全风险,但它很烦人,并且消耗了我的电子邮件主机的每月电子邮件限制。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

首先我还没有测试这个特定的示例,但在类似情况下我的方法是为您的日志记录编写一个自定义过滤器。

为此首先编写一个自定义过滤器:

import logging 

class NoAnnoyFilter(logging.Filter):
    def filter(self, record):
        status_code = getattr(record, 'status_code', None)
        return status_code != 500

然后将其添加到您的 settings.py 中的日志记录配置中:

DEFAULT_LOGGING = 
    ...
    'filters': 
        'no_annoy': 
            '()': 'myproject.utils.NoAnnoyFilter',
        ,
    ,
    ...
    'handlers': 
        'mail_admins': 
            'level': 'ERROR',
            'filters': ['no_annoy'],
            'class': 'django.utils.log.AdminEmailHandler'
        ,
        ...
    ,

您可以在 Django 代码本身中看到一些实际示例:https://github.com/django/django/blob/6709ea4ae91b906742506ac0c42a3a272991001f/django/utils/log.py

【讨论】:

感谢您的回复。我确信其他人肯定可以使用这个想法......我最终通过更改我的 nginx cofig 文件中的内容来修复它,添加了这个: if ($host !~* ^(example.com|www.example .com)$) 返回 444;

以上是关于来自探测黑客的 Django HTTP_HOST 错误,如何禁用此 500 错误?的主要内容,如果未能解决你的问题,请参考以下文章

Django 的 SuspiciousOperation 无效的 HTTP_HOST 标头

如何禁用 Django 的无效 HTTP_HOST 错误?

Django 错误(外部 IP):无效的 HTTP_HOST 标头:'*.domain.com'

黑客学习之信息收集

避免使用 Django + Elastic Beanstalk 获得“无效的 HTTP_HOST 标头:'localhost'”消息

Django 错误:无效的 HTTP_HOST 标头:u'/run/myprojectname/gunicorn.sock:'