mirror of
https://github.com/pretix/pretix.git
synced 2026-09-13 16:14:40 +00:00
Redirection plugin: Improve validation to avoid ReDoS (#6395)
* Redirection plugin: Improve validation to avoid ReDoS * Stricter regex
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
@@ -33,15 +34,22 @@ from pretix.control.views.event import (
|
|||||||
|
|
||||||
|
|
||||||
class ReturnSettingsForm(SettingsForm):
|
class ReturnSettingsForm(SettingsForm):
|
||||||
returnurl_prefix = forms.RegexField(
|
returnurl_prefix = forms.CharField(
|
||||||
label=_("Base redirection URLs"),
|
label=_("Base redirection URLs"),
|
||||||
help_text=_("Redirection will only be allowed to URLs that start with one of these prefixes. "
|
help_text=_("Redirection will only be allowed to URLs that start with one of these prefixes. "
|
||||||
"Enter one or more allowed URL prefix per line. "
|
"Enter one allowed URL prefix per line. "
|
||||||
"URL prefixes must include a slash after the hostname."),
|
"URL prefixes must include a slash after the hostname."),
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.Textarea,
|
widget=forms.Textarea,
|
||||||
regex=re.compile(r'^((https://.*/.*|http://localhost[:/].*)\n*)*$')
|
|
||||||
)
|
)
|
||||||
|
line_regex = re.compile(r'^(https://.*/.*|http://localhost(:[0-9]+)?/.*)$')
|
||||||
|
|
||||||
|
def clean_returnurl_prefix(self):
|
||||||
|
val = self.cleaned_data['returnurl_prefix']
|
||||||
|
for l in val.split("\n"):
|
||||||
|
if not re.match(self.line_regex, l):
|
||||||
|
raise ValidationError(_('All values must be URLs that include at last one slash after the hostname.'))
|
||||||
|
return val
|
||||||
|
|
||||||
|
|
||||||
class ReturnSettings(EventSettingsViewMixin, EventSettingsFormView):
|
class ReturnSettings(EventSettingsViewMixin, EventSettingsFormView):
|
||||||
|
|||||||
Reference in New Issue
Block a user