mirror of
https://github.com/django/django.git
synced 2025-10-26 15:16:09 +00:00
Fixed #19866 -- Added security logger and return 400 for SuspiciousOperation.
SuspiciousOperations have been differentiated into subclasses, and are now logged to a 'django.security.*' logger. SuspiciousOperations that reach django.core.handlers.base.BaseHandler will now return a 400 instead of a 500. Thanks to tiwoc for the report, and Carl Meyer and Donald Stufft for review.
This commit is contained in:
@@ -11,7 +11,7 @@ import cgi
|
||||
import sys
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import SuspiciousOperation
|
||||
from django.core.exceptions import SuspiciousMultipartForm
|
||||
from django.utils.datastructures import MultiValueDict
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils import six
|
||||
@@ -370,7 +370,7 @@ class LazyStream(six.Iterator):
|
||||
if current_number == num_bytes])
|
||||
|
||||
if number_equal > 40:
|
||||
raise SuspiciousOperation(
|
||||
raise SuspiciousMultipartForm(
|
||||
"The multipart parser got stuck, which shouldn't happen with"
|
||||
" normal uploaded files. Check for malicious upload activity;"
|
||||
" if there is none, report this to the Django developers."
|
||||
|
||||
@@ -14,7 +14,7 @@ except ImportError:
|
||||
|
||||
from django.conf import settings
|
||||
from django.core import signing
|
||||
from django.core.exceptions import SuspiciousOperation, ImproperlyConfigured
|
||||
from django.core.exceptions import DisallowedHost, ImproperlyConfigured
|
||||
from django.core.files import uploadhandler
|
||||
from django.http.multipartparser import MultiPartParser
|
||||
from django.utils import six
|
||||
@@ -72,7 +72,7 @@ class HttpRequest(object):
|
||||
msg = "Invalid HTTP_HOST header: %r." % host
|
||||
if domain:
|
||||
msg += "You may need to add %r to ALLOWED_HOSTS." % domain
|
||||
raise SuspiciousOperation(msg)
|
||||
raise DisallowedHost(msg)
|
||||
|
||||
def get_full_path(self):
|
||||
# RFC 3986 requires query string arguments to be in the ASCII range.
|
||||
|
||||
@@ -12,7 +12,7 @@ except ImportError:
|
||||
from django.conf import settings
|
||||
from django.core import signals
|
||||
from django.core import signing
|
||||
from django.core.exceptions import SuspiciousOperation
|
||||
from django.core.exceptions import DisallowedRedirect
|
||||
from django.http.cookie import SimpleCookie
|
||||
from django.utils import six, timezone
|
||||
from django.utils.encoding import force_bytes, iri_to_uri
|
||||
@@ -452,7 +452,7 @@ class HttpResponseRedirectBase(HttpResponse):
|
||||
def __init__(self, redirect_to, *args, **kwargs):
|
||||
parsed = urlparse(redirect_to)
|
||||
if parsed.scheme and parsed.scheme not in self.allowed_schemes:
|
||||
raise SuspiciousOperation("Unsafe redirect to URL with protocol '%s'" % parsed.scheme)
|
||||
raise DisallowedRedirect("Unsafe redirect to URL with protocol '%s'" % parsed.scheme)
|
||||
super(HttpResponseRedirectBase, self).__init__(*args, **kwargs)
|
||||
self['Location'] = iri_to_uri(redirect_to)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user