diff options
author | Kristjan Valur Jonsson <sweskman@gmail.com> | 2011-03-30 11:39:24 (GMT) |
---|---|---|
committer | Kristjan Valur Jonsson <sweskman@gmail.com> | 2011-03-30 11:39:24 (GMT) |
commit | 3c136e19b9de13f8d4163a0feb3af54ab8b8c765 (patch) | |
tree | 8a0c2faa0a95fc1ddaf994f9b8cc6ecd88b547d9 /Lib/urllib/request.py | |
parent | 978da33c7a07bf133d144a7ad342de7e20777250 (diff) | |
parent | 010a94848943b543dd54661e7e3857f19aabd741 (diff) | |
download | cpython-3c136e19b9de13f8d4163a0feb3af54ab8b8c765.zip cpython-3c136e19b9de13f8d4163a0feb3af54ab8b8c765.tar.gz cpython-3c136e19b9de13f8d4163a0feb3af54ab8b8c765.tar.bz2 |
Merge
Diffstat (limited to 'Lib/urllib/request.py')
-rw-r--r-- | Lib/urllib/request.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index 0aa7a77..304bf59 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -545,6 +545,17 @@ class HTTPRedirectHandler(BaseHandler): # fix a possible malformed URL urlparts = urlparse(newurl) + + # For security reasons we don't allow redirection to anything other + # than http, https or ftp. + + if not urlparts.scheme in ('http', 'https', 'ftp'): + raise HTTPError(newurl, code, + msg + + " - Redirection to url '%s' is not allowed" % + newurl, + headers, fp) + if not urlparts.path: urlparts = list(urlparts) urlparts[2] = "/" @@ -1903,8 +1914,24 @@ class FancyURLopener(URLopener): return void = fp.read() fp.close() + # In case the server sent a relative URL, join with original: newurl = urljoin(self.type + ":" + url, newurl) + + urlparts = urlparse(newurl) + + # For security reasons, we don't allow redirection to anything other + # than http, https and ftp. + + # We are using newer HTTPError with older redirect_internal method + # This older method will get deprecated in 3.3 + + if not urlparts.scheme in ('http', 'https', 'ftp'): + raise HTTPError(newurl, errcode, + errmsg + + " Redirection to url '%s' is not allowed." % newurl, + headers, fp) + return self.open(newurl) def http_error_301(self, url, fp, errcode, errmsg, headers, data=None): |