mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #26325 -- Made MultiPartParser ignore filenames that normalize to an empty string.
This commit is contained in:
committed by
Tim Graham
parent
75614f6d4c
commit
4b129ac81f
@@ -179,6 +179,41 @@ class FileUploadTests(TestCase):
|
||||
response = self.client.request(**r)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_blank_filenames(self):
|
||||
"""
|
||||
Receiving file upload when filename is blank (before and after
|
||||
sanitization) should be okay.
|
||||
"""
|
||||
# The second value is normalized to an empty name by
|
||||
# MultiPartParser.IE_sanitize()
|
||||
filenames = ['', 'C:\\Windows\\']
|
||||
|
||||
payload = client.FakePayload()
|
||||
for i, name in enumerate(filenames):
|
||||
payload.write('\r\n'.join([
|
||||
'--' + client.BOUNDARY,
|
||||
'Content-Disposition: form-data; name="file%s"; filename="%s"' % (i, name),
|
||||
'Content-Type: application/octet-stream',
|
||||
'',
|
||||
'You got pwnd.\r\n'
|
||||
]))
|
||||
payload.write('\r\n--' + client.BOUNDARY + '--\r\n')
|
||||
|
||||
r = {
|
||||
'CONTENT_LENGTH': len(payload),
|
||||
'CONTENT_TYPE': client.MULTIPART_CONTENT,
|
||||
'PATH_INFO': '/echo/',
|
||||
'REQUEST_METHOD': 'POST',
|
||||
'wsgi.input': payload,
|
||||
}
|
||||
response = self.client.request(**r)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Empty filenames should be ignored
|
||||
received = json.loads(response.content.decode('utf-8'))
|
||||
for i, name in enumerate(filenames):
|
||||
self.assertIsNone(received.get('file%s' % i))
|
||||
|
||||
def test_dangerous_file_names(self):
|
||||
"""Uploaded file names should be sanitized before ever reaching the view."""
|
||||
# This test simulates possible directory traversal attacks by a
|
||||
|
||||
Reference in New Issue
Block a user