summaryrefslogtreecommitdiff
path: root/postgresqleu/static/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'postgresqleu/static/views.py')
-rw-r--r--postgresqleu/static/views.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/postgresqleu/static/views.py b/postgresqleu/static/views.py
index 9c04dd05..d45cbfb2 100644
--- a/postgresqleu/static/views.py
+++ b/postgresqleu/static/views.py
@@ -1,6 +1,10 @@
from django.http import HttpResponse, Http404
from django.template import loader, TemplateDoesNotExist
+import re
+
+re_staticfilenames = re.compile("^[0-9A-Z/_-]+$", re.IGNORECASE)
+
# Fallback handler for URLs not matching anything else. Fall them
# back to a static template. If that one is not found, send a 404
@@ -10,6 +14,14 @@ def static_fallback(request, url):
if url.find('..') > -1:
raise Http404('Page not found')
+ if not re_staticfilenames.match(url):
+ raise Http404('Page not found.')
+
+ if len(url) > 250:
+ # Maximum length is really per-directory, but we shouldn't have any pages/fallback
+ # urls with anywhere *near* that, so let's just limit it on the whole
+ raise Http404('Page not found.')
+
try:
t = loader.get_template('pages/%s.html' % url)
return HttpResponse(t.render())