summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2011-09-10 01:28:31 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2011-09-10 01:28:31 +0000
commitc613af4d6485586c79d692b70a9acac429f3ca9d (patch)
treeba85a48d964f703d41c304b180808866aa5ebc7f /tests
parent285b464fb8cb972af6bbdd7cf62b46e75c128a64 (diff)
[1.2.X] Added protection against spoofing of X_FORWARDED_HOST headers. A security announcement will be made shortly.
Backport of r16758 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@16764 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/requests/tests.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/regressiontests/requests/tests.py b/tests/regressiontests/requests/tests.py
index 556d61e2ce..acae5f479b 100644
--- a/tests/regressiontests/requests/tests.py
+++ b/tests/regressiontests/requests/tests.py
@@ -2,11 +2,13 @@ from datetime import datetime, timedelta
import time
import unittest
+from django.conf import settings
from django.http import HttpRequest, HttpResponse, parse_cookie
from django.core.handlers.wsgi import WSGIRequest
from django.core.handlers.modpython import ModPythonRequest
from django.utils.http import cookie_date
+
class RequestsTests(unittest.TestCase):
def test_httprequest(self):
@@ -57,3 +59,91 @@ class RequestsTests(unittest.TestCase):
request.path = ''
self.assertEqual(request.build_absolute_uri(location="/path/with:colons"),
'http://www.example.com/path/with:colons')
+
+ def test_http_get_host(self):
+ old_USE_X_FORWARDED_HOST = settings.USE_X_FORWARDED_HOST
+ try:
+ settings.USE_X_FORWARDED_HOST = False
+
+ # Check if X_FORWARDED_HOST is provided.
+ request = HttpRequest()
+ request.META = {
+ u'HTTP_X_FORWARDED_HOST': u'forward.com',
+ u'HTTP_HOST': u'example.com',
+ u'SERVER_NAME': u'internal.com',
+ u'SERVER_PORT': 80,
+ }
+ # X_FORWARDED_HOST is ignored.
+ self.assertEqual(request.get_host(), 'example.com')
+
+ # Check if X_FORWARDED_HOST isn't provided.
+ request = HttpRequest()
+ request.META = {
+ u'HTTP_HOST': u'example.com',
+ u'SERVER_NAME': u'internal.com',
+ u'SERVER_PORT': 80,
+ }
+ self.assertEqual(request.get_host(), 'example.com')
+
+ # Check if HTTP_HOST isn't provided.
+ request = HttpRequest()
+ request.META = {
+ u'SERVER_NAME': u'internal.com',
+ u'SERVER_PORT': 80,
+ }
+ self.assertEqual(request.get_host(), 'internal.com')
+
+ # Check if HTTP_HOST isn't provided, and we're on a nonstandard port
+ request = HttpRequest()
+ request.META = {
+ u'SERVER_NAME': u'internal.com',
+ u'SERVER_PORT': 8042,
+ }
+ self.assertEqual(request.get_host(), 'internal.com:8042')
+
+ finally:
+ settings.USE_X_FORWARDED_HOST = old_USE_X_FORWARDED_HOST
+
+ def test_http_get_host_with_x_forwarded_host(self):
+ old_USE_X_FORWARDED_HOST = settings.USE_X_FORWARDED_HOST
+ try:
+ settings.USE_X_FORWARDED_HOST = True
+
+ # Check if X_FORWARDED_HOST is provided.
+ request = HttpRequest()
+ request.META = {
+ u'HTTP_X_FORWARDED_HOST': u'forward.com',
+ u'HTTP_HOST': u'example.com',
+ u'SERVER_NAME': u'internal.com',
+ u'SERVER_PORT': 80,
+ }
+ # X_FORWARDED_HOST is obeyed.
+ self.assertEqual(request.get_host(), 'forward.com')
+
+ # Check if X_FORWARDED_HOST isn't provided.
+ request = HttpRequest()
+ request.META = {
+ u'HTTP_HOST': u'example.com',
+ u'SERVER_NAME': u'internal.com',
+ u'SERVER_PORT': 80,
+ }
+ self.assertEqual(request.get_host(), 'example.com')
+
+ # Check if HTTP_HOST isn't provided.
+ request = HttpRequest()
+ request.META = {
+ u'SERVER_NAME': u'internal.com',
+ u'SERVER_PORT': 80,
+ }
+ self.assertEqual(request.get_host(), 'internal.com')
+
+ # Check if HTTP_HOST isn't provided, and we're on a nonstandard port
+ request = HttpRequest()
+ request.META = {
+ u'SERVER_NAME': u'internal.com',
+ u'SERVER_PORT': 8042,
+ }
+ self.assertEqual(request.get_host(), 'internal.com:8042')
+
+ finally:
+ settings.USE_X_FORWARDED_HOST = old_USE_X_FORWARDED_HOST