diff options
| author | Preston Holmes <preston@ptone.com> | 2012-10-18 11:10:46 -0700 |
|---|---|---|
| committer | Preston Holmes <preston@ptone.com> | 2012-10-18 11:10:46 -0700 |
| commit | 4fb510fde4db95d15205afefdefade97eee4d3ef (patch) | |
| tree | a6e31ffb3cf121cb1215de93cf0ab0b88241ce93 /tests/regressiontests/requests | |
| parent | 0775ab295566ccb306b8ae6340d2690c3d0aa6af (diff) | |
Added missed poisoned host header tests
Diffstat (limited to 'tests/regressiontests/requests')
| -rw-r--r-- | tests/regressiontests/requests/tests.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/regressiontests/requests/tests.py b/tests/regressiontests/requests/tests.py index f9e1112b2e..d80161371e 100644 --- a/tests/regressiontests/requests/tests.py +++ b/tests/regressiontests/requests/tests.py @@ -6,6 +6,7 @@ from datetime import datetime, timedelta from io import BytesIO from django.conf import settings +from django.core.exceptions import SuspiciousOperation from django.core.handlers.wsgi import WSGIRequest, LimitedStream from django.http import HttpRequest, HttpResponse, parse_cookie, build_request_repr, UnreadablePostError from django.test.utils import str_prefix @@ -109,6 +110,38 @@ class RequestsTests(unittest.TestCase): } self.assertEqual(request.get_host(), 'internal.com:8042') + # Poisoned host headers are rejected as suspicious + legit_hosts = [ + 'example.com', + 'example.com:80', + '12.34.56.78', + '12.34.56.78:443', + '[2001:19f0:feee::dead:beef:cafe]', + '[2001:19f0:feee::dead:beef:cafe]:8080', + ] + + poisoned_hosts = [ + 'example.com@evil.tld', + 'example.com:dr.frankenstein@evil.tld', + 'example.com:someone@somestie.com:80', + 'example.com:80/badpath' + ] + + for host in legit_hosts: + request = HttpRequest() + request.META = { + 'HTTP_HOST': host, + } + request.get_host() + + for host in poisoned_hosts: + with self.assertRaises(SuspiciousOperation): + request = HttpRequest() + request.META = { + 'HTTP_HOST': host, + } + request.get_host() + finally: settings.USE_X_FORWARDED_HOST = old_USE_X_FORWARDED_HOST @@ -153,6 +186,38 @@ class RequestsTests(unittest.TestCase): } self.assertEqual(request.get_host(), 'internal.com:8042') + # Poisoned host headers are rejected as suspicious + legit_hosts = [ + 'example.com', + 'example.com:80', + '12.34.56.78', + '12.34.56.78:443', + '[2001:19f0:feee::dead:beef:cafe]', + '[2001:19f0:feee::dead:beef:cafe]:8080', + ] + + poisoned_hosts = [ + 'example.com@evil.tld', + 'example.com:dr.frankenstein@evil.tld', + 'example.com:dr.frankenstein@evil.tld:80', + 'example.com:80/badpath' + ] + + for host in legit_hosts: + request = HttpRequest() + request.META = { + 'HTTP_HOST': host, + } + request.get_host() + + for host in poisoned_hosts: + with self.assertRaises(SuspiciousOperation): + request = HttpRequest() + request.META = { + 'HTTP_HOST': host, + } + request.get_host() + finally: settings.USE_X_FORWARDED_HOST = old_USE_X_FORWARDED_HOST |
