diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2022-02-25 11:31:03 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-25 11:31:03 (GMT) |
commit | e2e72567a1c94c548868f6ee5329363e6036057a (patch) | |
tree | 4fda0ff786291269065939cc0693ae670276dd30 /Lib/urllib | |
parent | 53ecf9e08d35801807daf74492c090a325f995b7 (diff) | |
download | cpython-e2e72567a1c94c548868f6ee5329363e6036057a.zip cpython-e2e72567a1c94c548868f6ee5329363e6036057a.tar.gz cpython-e2e72567a1c94c548868f6ee5329363e6036057a.tar.bz2 |
bpo-46756: Fix authorization check in urllib.request (GH-31353)
Fix a bug in urllib.request.HTTPPasswordMgr.find_user_password() and
urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated() which
allowed to bypass authorization. For example, access to URI "example.org/foobar"
was allowed if the user was authorized for URI "example.org/foo".
Diffstat (limited to 'Lib/urllib')
-rw-r--r-- | Lib/urllib/request.py | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index fd6fc36..02f9626 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -889,10 +889,10 @@ class HTTPPasswordMgr: return True if base[0] != test[0]: return False - common = posixpath.commonprefix((base[1], test[1])) - if len(common) == len(base[1]): - return True - return False + prefix = base[1] + if prefix[-1:] != '/': + prefix += '/' + return test[1].startswith(prefix) class HTTPPasswordMgrWithDefaultRealm(HTTPPasswordMgr): |