Seit der Einführung der ALLOWED_HOSTS Einstellung in Django 1.4.4, bekomme ich eine Menge von Django Fehler E-Mails an meine Admin-Adresse für Ausnahmen durch einige alberne Spinne auf der Suche nach vulnerable phpMyAdmin-Installationen oder dergleichen. Diese E-Mails sind absolut gültig, da die Host-Header in den Anfragen der Spiders in der Tat falsch sind, aber ich würde lieber django senden Sie mir nur Fehlermeldungen, wenn wichtige Dinge schief gehen. Gibt es eine einfache Methode zum Schweigen zu bringen SuspiciousOperation
Mails, oder muss ich den ganzen Weg gehen und Unterklasse CommonMiddleware
?Unterdrücken Admin E-Mail auf Django ALLOWED_HOSTS Ausnahme
Antwort
hätte ein bisschen Googeln ergab, dass es bereits einen Fehler in dieser für Tracker Djangos Fehler:
https://code.djangoproject.com/ticket/19866
Bis es ein Update in (hoffentlich) Django ist 1.5.1, gibt es eine ist workaround Beteiligung ein Protokollfilter
Wenn Sie Apache verwenden, können Sie den Verkehr zu verschiedenen Hosts aus der httpd.conf filtern - das ist eine viel einfachere Lösung als das Schreiben von Code. So etwas wie
WSGIPythonPath [your Python path]
ServerSignature Off
ServerTokens Prod
<VirtualHost *:80>
DocumentRoot /var/www
</VirtualHost>
<VirtualHost *:80>
ServerName www.myrealhost.com
rest of apache configuration ....
</VirtualHost>
Die erste Einstellung wird alles greifen, die nicht Ihren Servernamen Übereinstimmen (zB www.myrealhost.com)
Das ist eine großartige Idee, aber ich teile leider das Hosting ... – Simon
die Admin-E-Mail zu unterdrücken, definiert einen Protokollierungsfilter:
def skip_suspicious_operations(record):
if record.name == 'django.security.DisallowedHost':
return False
return True
Dann in settings.py fügen sie es dem LOGGING dict als Filter:
'filters': {
'skip_suspicious_operations': {
'()': 'django.utils.log.CallbackFilter',
'callback': skip_suspicious_operations,
}
}
und fügen th e filter zum mail_admins handler:
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['skip_suspicious_operations'],
'include_html' : True,
}
}
Dies funktioniert in Django 1.6 wie es ist. In Django-1.5 finde ich das RHS des Vergleichs mit record.name ein wenig anders, aber ansonsten sollte es funktionieren.
Ich denke, Sie brauchen auch eine 'Logger' mit einem Schlüssel für 'django.security' innerhalb der LOGGING-Diktat, um diese Nachrichten tatsächlich zu fangen. –
Warum überprüfen Sie record.name anstelle von isinstance (record, DisallowedHost)? –
Aber warte, es gibt eine App dafür!
Der Vollständigkeit halber können Sie Teile der Protokollierung außer Kraft setzen: (getestet auf 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,
},
},
}
Auch Django security docs sehen.
Daher bevorzuge ich normalerweise alle unmatched vhosts nur zu einem einzigen vhost umleiten. dies wird mit einem einfachen Neben der apache.conf Datei getan ...
<VirtualHost *:80>
RedirectMatch ^/?(.*) http://www.example.com/$1
</VirtualHost>
Das obige Beispiel würde eine Anfrage zu jeder alleinstehenden vHost http://www.example.com, umgeleitet werden, während die Pfadkomponente richtig halten.
Dies hat auch den zusätzlichen Vorteil, den Fall zu korrigieren, in dem ein Benutzer einer ungültigen Anfrage oder dergleichen folgt.
- 1. Django ALLOWED_HOSTS IP-Bereich
- 2. Email Templat in django
- 3. Ausnahme beim Speichern in Django admin abfangen?
- 4. django 1.5 Update allowed_hosts Fehler SuspiciousOperation
- 5. Django-Signalfehler allgemein unterdrücken?
- 6. Wird ALLOWED_HOSTS auf Heroku benötigt?
- 7. Email xlsx Befestigung Django
- 8. Logging-Aktivität auf Django Admin - Django
- 9. Django Admin-Filter auf Fremdschlüsseleigenschaft
- 10. FieldError auf Django Admin Fieldsets
- 11. Django kann nicht mit Debug Static = False und allowed_hosts finden
- 12. Django ALLOWED_HOSTS: OK, um "localhost" in eine bereitgestellte Einstellungsdatei aufzunehmen?
- 13. django-social-auth: nicht speichern twitter's email
- 14. Django Admin
- 15. django: mit admin datepicker
- 16. Frühling Wolke [email protected] Messaging nicht zu errorChannel auf Ausnahme
- 17. Passwort ändern in Django Admin
- 18. django Admin-Seite
- 19. Standardfilter in Django admin
- 20. Django - Admin: list_display TextField
- 21. Django admin: Zeitzone Anzeige
- 22. Django Admin Sortierreihenfolge
- 23. Weird django admin importerror
- 24. , wie Entscheidungen auf Admin-Seiten ändern - django
- 25. Neue Zeile auf Django admin Textfeld
- 26. Wie Bild auf Django Admin-Seite zuschneiden?
- 27. Django Modell Berechtigungen nicht auf Admin
- 28. Django admin is_staff basiert auf der Gruppe
- 29. django admin Wie Widget auf readonly Feld
- 30. Dynamische Filterung auf FK in Django Admin
Dieser Bug adressiert nicht das Versenden einer E-Mail bei verdächtigen Operationen - es geht darum, eine '500' Antwort anstelle einer '400' zu senden. Es wurde in Django 1.6 behoben, aber eine Admin-E-Mail wird noch generiert. – Nils