mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.6.x] Fixed a remote code execution vulnerabilty in URL reversing.
Thanks Benjamin Bach for the report and initial patch.
This is a security fix; disclosure to follow shortly.
Backport of 8b93b31487 from master
			
			
This commit is contained in:
		| @@ -1,8 +1,11 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| """ | ||||
| Unit tests for reverse URL lookups. | ||||
| """ | ||||
| from __future__ import absolute_import, unicode_literals | ||||
|  | ||||
| import sys | ||||
|  | ||||
| from django.conf import settings | ||||
| from django.contrib.auth.models import User | ||||
| from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist | ||||
| @@ -313,6 +316,25 @@ class ReverseShortcutTests(TestCase): | ||||
|         self.assertEqual(res.url, '/foo/') | ||||
|         res = redirect('http://example.com/') | ||||
|         self.assertEqual(res.url, 'http://example.com/') | ||||
|         # Assert that we can redirect using UTF-8 strings | ||||
|         res = redirect('/æøå/abc/') | ||||
|         self.assertEqual(res.url, '/%C3%A6%C3%B8%C3%A5/abc/') | ||||
|         # Assert that no imports are attempted when dealing with a relative path | ||||
|         # (previously, the below would resolve in a UnicodeEncodeError from __import__ ) | ||||
|         res = redirect('/æøå.abc/') | ||||
|         self.assertEqual(res.url, '/%C3%A6%C3%B8%C3%A5.abc/') | ||||
|         res = redirect('os.path') | ||||
|         self.assertEqual(res.url, 'os.path') | ||||
|  | ||||
|     def test_no_illegal_imports(self): | ||||
|         # modules that are not listed in urlpatterns should not be importable | ||||
|         redirect("urlpatterns_reverse.nonimported_module.view") | ||||
|         self.assertNotIn("urlpatterns_reverse.nonimported_module", sys.modules) | ||||
|  | ||||
|     def test_reverse_by_path_nested(self): | ||||
|         # Views that are added to urlpatterns using include() should be | ||||
|         # reversable by doted path. | ||||
|         self.assertEqual(reverse('urlpatterns_reverse.views.nested_view'), '/includes/nested_path/') | ||||
|  | ||||
|     def test_redirect_view_object(self): | ||||
|         from .views import absolute_kwargs_view | ||||
| @@ -641,4 +663,3 @@ class ViewLoadingTests(TestCase): | ||||
|         # swallow it. | ||||
|         self.assertRaises(AttributeError, get_callable, | ||||
|             'urlpatterns_reverse.views_broken.i_am_broken') | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user