Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
07ef62c4
Commit
07ef62c4
authored
Mar 29, 2011
by
Guido van Rossum
Browse files
Options
Browse Files
Download
Plain Diff
Merge issue 11662 from 2.6.
parents
3c599bdb
079381d2
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
61 additions
and
0 deletions
+61
-0
Lib/test/test_urllib.py
Lib/test/test_urllib.py
+14
-0
Lib/test/test_urllib2.py
Lib/test/test_urllib2.py
+21
-0
Lib/urllib.py
Lib/urllib.py
+12
-0
Lib/urllib2.py
Lib/urllib2.py
+11
-0
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/test/test_urllib.py
View file @
07ef62c4
...
...
@@ -161,6 +161,20 @@ Content-Type: text/html; charset=iso-8859-1
finally
:
self
.
unfakehttp
()
def
test_invalid_redirect
(
self
):
# urlopen() should raise IOError for many error codes.
self
.
fakehttp
(
"""HTTP/1.1 302 Found
Date: Wed, 02 Jan 2008 03:03:54 GMT
Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e
Location: file:README
Connection: close
Content-Type: text/html; charset=iso-8859-1
"""
)
try
:
self
.
assertRaises
(
IOError
,
urllib
.
urlopen
,
"http://python.org/"
)
finally
:
self
.
unfakehttp
()
def
test_empty_socket
(
self
):
# urlopen() raises IOError if the underlying socket does not send any
# data. (#1680230)
...
...
Lib/test/test_urllib2.py
View file @
07ef62c4
...
...
@@ -969,6 +969,27 @@ class HandlerTests(unittest.TestCase):
self
.
assertEqual
(
count
,
urllib2
.
HTTPRedirectHandler
.
max_redirections
)
def
test_invalid_redirect
(
self
):
from_url
=
"http://example.com/a.html"
valid_schemes
=
[
'http'
,
'https'
,
'ftp'
]
invalid_schemes
=
[
'file'
,
'imap'
,
'ldap'
]
schemeless_url
=
"example.com/b.html"
h
=
urllib2
.
HTTPRedirectHandler
()
o
=
h
.
parent
=
MockOpener
()
req
=
Request
(
from_url
)
for
scheme
in
invalid_schemes
:
invalid_url
=
scheme
+
'://'
+
schemeless_url
self
.
assertRaises
(
urllib2
.
HTTPError
,
h
.
http_error_302
,
req
,
MockFile
(),
302
,
"Security Loophole"
,
MockHeaders
({
"location"
:
invalid_url
}))
for
scheme
in
valid_schemes
:
valid_url
=
scheme
+
'://'
+
schemeless_url
h
.
http_error_302
(
req
,
MockFile
(),
302
,
"That's fine"
,
MockHeaders
({
"location"
:
valid_url
}))
self
.
assertEqual
(
o
.
req
.
get_full_url
(),
valid_url
)
def
test_cookie_redirect
(
self
):
# cookies shouldn't leak into redirected requests
from
cookielib
import
CookieJar
...
...
Lib/urllib.py
View file @
07ef62c4
...
...
@@ -644,6 +644,18 @@ class FancyURLopener(URLopener):
fp
.
close
()
# In case the server sent a relative URL, join with original:
newurl
=
basejoin
(
self
.
type
+
":"
+
url
,
newurl
)
# For security reasons we do not allow redirects to protocols
# other than HTTP, HTTPS or FTP.
newurl_lower
=
newurl
.
lower
()
if
not
(
newurl_lower
.
startswith
(
'http://'
)
or
newurl_lower
.
startswith
(
'https://'
)
or
newurl_lower
.
startswith
(
'ftp://'
)):
raise
IOError
(
'redirect error'
,
errcode
,
errmsg
+
" - Redirection to url '%s' is not allowed"
%
newurl
,
headers
)
return
self
.
open
(
newurl
)
def
http_error_301
(
self
,
url
,
fp
,
errcode
,
errmsg
,
headers
,
data
=
None
):
...
...
Lib/urllib2.py
View file @
07ef62c4
...
...
@@ -578,6 +578,17 @@ class HTTPRedirectHandler(BaseHandler):
newurl = urlparse.urljoin(req.get_full_url(), newurl)
# For security reasons we do not allow redirects to protocols
# other than HTTP, HTTPS or FTP.
newurl_lower = newurl.lower()
if not (newurl_lower.startswith('http://') or
newurl_lower.startswith('https://') or
newurl_lower.startswith('ftp://')):
raise HTTPError(newurl, code,
msg + "
-
Redirection
to
url
'%s'
is
not
allowed
" %
newurl,
headers, fp)
# XXX Probably want to forget about the state of the current
# request, although that might interact poorly with other
# handlers that also use handler-specific request attributes
...
...
Misc/NEWS
View file @
07ef62c4
...
...
@@ -16,6 +16,9 @@ Core and Builtins
- Issue #11450: Don'
t
truncate
hg
version
info
in
Py_GetBuildInfo
()
when
there
are
many
tags
(
e
.
g
.
when
using
mq
).
Patch
by
Nadeem
Vawda
.
-
Issue
#
11662
:
Make
urllib
and
urllib2
ignore
redirections
if
the
scheme
is
not
HTTP
,
HTTPS
or
FTP
(
CVE
-
2011
-
1521
).
-
Issue
#
10451
:
memoryview
objects
could
allow
to
mutate
a
readable
buffer
.
Initial
patch
by
Ross
Lagerwall
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment