summaryrefslogtreecommitdiff
path: root/django/middleware/common.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/middleware/common.py')
-rw-r--r--django/middleware/common.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/django/middleware/common.py b/django/middleware/common.py
index 4f060b8590..6283214fad 100644
--- a/django/middleware/common.py
+++ b/django/middleware/common.py
@@ -2,6 +2,7 @@ from django.conf import settings
from django import http
from django.core.mail import mail_managers
import md5
+import re
class CommonMiddleware(object):
"""
@@ -61,12 +62,12 @@ class CommonMiddleware(object):
# send a note to the managers.
domain = http.get_host(request)
referer = request.META.get('HTTP_REFERER', None)
- is_internal = referer and (domain in referer)
+ is_internal = _is_internal_request(domain, referer)
path = request.get_full_path()
if referer and not _is_ignorable_404(path) and (is_internal or '?' not in referer):
- ua = request.META.get('HTTP_USER_AGENT','<none>')
+ ua = request.META.get('HTTP_USER_AGENT', '<none>')
mail_managers("Broken %slink on %s" % ((is_internal and 'INTERNAL ' or ''), domain),
- "Referrer: %s\nRequested URL: %s\nUser Agent: %s\n" % (referer, request.get_full_path(), ua))
+ "Referrer: %s\nRequested URL: %s\nUser agent: %s\n" % (referer, request.get_full_path(), ua))
return response
# Use ETags, if requested.
@@ -88,3 +89,8 @@ def _is_ignorable_404(uri):
if uri.endswith(end):
return True
return False
+
+def _is_internal_request(domain, referer):
+ "Return true if the referring URL is the same domain as the current request"
+ # Different subdomains are treated as different domains.
+ return referer is not None and re.match("^https?://%s/" % re.escape(domain), referer)