mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
Prevent nullbytes in input data globally (#6071)
* Prevent nullbytes in input data globally * Only on urlencoded POST * Split middleware
This commit is contained in:
@@ -24,6 +24,7 @@ from urllib.parse import urlparse, urlsplit
|
|||||||
from zoneinfo import ZoneInfo, ZoneInfoNotFoundError
|
from zoneinfo import ZoneInfo, ZoneInfoNotFoundError
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.exceptions import BadRequest
|
||||||
from django.http import Http404, HttpRequest, HttpResponse
|
from django.http import Http404, HttpRequest, HttpResponse
|
||||||
from django.middleware.common import CommonMiddleware
|
from django.middleware.common import CommonMiddleware
|
||||||
from django.urls import get_script_prefix, resolve
|
from django.urls import get_script_prefix, resolve
|
||||||
@@ -347,6 +348,18 @@ class SecurityMiddleware(MiddlewareMixin):
|
|||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
|
||||||
|
class RejectInvalidInputMiddleware(MiddlewareMixin):
|
||||||
|
|
||||||
|
def process_request(self, request):
|
||||||
|
# Nullbytes in GET/POST parameters are mostly harmless, as they will later fail on database insertion, but it
|
||||||
|
# keeps spamming our error logs whenever someone tries to run a vulnerability scanner.
|
||||||
|
if "\x00" in request.META['QUERY_STRING'] or "%00" in request.META['QUERY_STRING']:
|
||||||
|
raise BadRequest("Invalid characters in input.")
|
||||||
|
if request.method in ('POST', 'PUT', 'PATCH') and request.content_type == "application/x-www-form-urlencoded":
|
||||||
|
if any("\x00" in value for key, value_list in request.POST.lists() for value in value_list):
|
||||||
|
raise BadRequest("Invalid characters in input.")
|
||||||
|
|
||||||
|
|
||||||
class CustomCommonMiddleware(CommonMiddleware):
|
class CustomCommonMiddleware(CommonMiddleware):
|
||||||
|
|
||||||
def get_full_path_with_slash(self, request):
|
def get_full_path_with_slash(self, request):
|
||||||
|
|||||||
@@ -515,6 +515,7 @@ MIDDLEWARE = [
|
|||||||
'pretix.control.middleware.AuditLogMiddleware',
|
'pretix.control.middleware.AuditLogMiddleware',
|
||||||
'pretix.base.middleware.LocaleMiddleware',
|
'pretix.base.middleware.LocaleMiddleware',
|
||||||
'pretix.base.middleware.SecurityMiddleware',
|
'pretix.base.middleware.SecurityMiddleware',
|
||||||
|
'pretix.base.middleware.RejectInvalidInputMiddleware',
|
||||||
'pretix.presale.middleware.EventMiddleware',
|
'pretix.presale.middleware.EventMiddleware',
|
||||||
'pretix.api.middleware.ApiScopeMiddleware',
|
'pretix.api.middleware.ApiScopeMiddleware',
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user