在django ALLOWED_HOSTS异常上禁止管理员电子邮件

Sim*_*mon 17 django

自从在django 1.4.4中引入ALLOWED_HOSTS设置以来,我收到了很多关于django错误的电子邮件到我的管理员地址,因为一些愚蠢的蜘蛛寻找易受攻击的phpMyAdmin安装或其他一些例外.这些邮件是完全有效的,因为蜘蛛请求中的主机头确实是错误的,但我宁愿让django在重要的事情出错时只向我发送错误邮件.是否有一种简单的方法可以使SuspiciousOperation邮件静音,或者我是否必须一直使用子类CommonMiddleware?

Dan*_*man 32

为了完整性,您可以覆盖部分日志记录:(在django 1.6上测试):

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
    },
    'loggers': {
        'django.security.DisallowedHost': {
            'handlers': ['null'],
            'propagate': False,
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

另请参阅Django安全文档.


Nil*_*ils 6

要禁止管理员电子邮件,请定义日志记录筛选器:

def skip_suspicious_operations(record):
    if record.name == 'django.security.DisallowedHost':
        return False
    return True
Run Code Online (Sandbox Code Playgroud)

然后在settings.py中将其作为过滤器添加到LOGGING dict中:

'filters': {
    'skip_suspicious_operations': { 
        '()': 'django.utils.log.CallbackFilter',
        'callback': skip_suspicious_operations,
    }
}
Run Code Online (Sandbox Code Playgroud)

并将过滤器添加到mail_admins处理程序:

'handlers': {
    'mail_admins': {
        'level': 'ERROR',
        'filters': ['skip_suspicious_operations'],
        'include_html' : True,
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于Django 1.6.在Django-1.5中,我认为与record.name进行比较的RHS有点不同,但除此之外它应该有效.


Sim*_*mon 1

谷歌搜索一下就会发现,Django 的错误跟踪器中已经存在一个错误:

https://code.djangoproject.com/ticket/19866

在(希望)Django 1.5.1 中出现修复之前,有一个涉及日志过滤器的解决方法。