Skip to content

Commit 7dbe2db

Browse files
authored
Merge pull request #779 from AnswerDotAI/erikgaas/safe_redirect
Strip Authorization header on cross-origin redirects
2 parents bc91e15 + 6da8916 commit 7dbe2db

3 files changed

Lines changed: 19 additions & 2 deletions

File tree

fastcore/_modidx.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,9 @@
487487
'fastcore.net': { 'fastcore.net.HTTP4xxClientError': ('net.html#http4xxclienterror', 'fastcore/net.py'),
488488
'fastcore.net.HTTP5xxServerError': ('net.html#http5xxservererror', 'fastcore/net.py'),
489489
'fastcore.net.Request.summary': ('net.html#request.summary', 'fastcore/net.py'),
490+
'fastcore.net._SafeRedirectHandler': ('net.html#_saferedirecthandler', 'fastcore/net.py'),
491+
'fastcore.net._SafeRedirectHandler.redirect_request': ( 'net.html#_saferedirecthandler.redirect_request',
492+
'fastcore/net.py'),
490493
'fastcore.net._socket_det': ('net.html#_socket_det', 'fastcore/net.py'),
491494
'fastcore.net.do_request': ('net.html#do_request', 'fastcore/net.py'),
492495
'fastcore.net.http_response': ('net.html#http_response', 'fastcore/net.py'),

fastcore/net.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,15 @@ class HTTP5xxServerError(HTTPError):
7474
pass
7575

7676
# %% ../nbs/03b_net.ipynb #128b5f4a
77+
class _SafeRedirectHandler(urllib.request.HTTPRedirectHandler):
78+
def redirect_request(self, req, fp, code, msg, headers, newurl):
79+
new_req = super().redirect_request(req, fp, code, msg, headers, newurl)
80+
if new_req and urlparse(newurl).netloc != urlparse(req.full_url).netloc:
81+
new_req.remove_header('Authorization')
82+
return new_req
83+
7784
def urlopener():
78-
_opener = urllib.request.build_opener()
85+
_opener = urllib.request.build_opener(_SafeRedirectHandler)
7986
_opener.addheaders = list(url_default_headers.items())
8087
return _opener
8188

nbs/03b_net.ipynb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,15 @@
270270
"outputs": [],
271271
"source": [
272272
"#| export\n",
273+
"class _SafeRedirectHandler(urllib.request.HTTPRedirectHandler):\n",
274+
" def redirect_request(self, req, fp, code, msg, headers, newurl):\n",
275+
" new_req = super().redirect_request(req, fp, code, msg, headers, newurl)\n",
276+
" if new_req and urlparse(newurl).netloc != urlparse(req.full_url).netloc:\n",
277+
" new_req.remove_header('Authorization')\n",
278+
" return new_req\n",
279+
"\n",
273280
"def urlopener():\n",
274-
" _opener = urllib.request.build_opener()\n",
281+
" _opener = urllib.request.build_opener(_SafeRedirectHandler)\n",
275282
" _opener.addheaders = list(url_default_headers.items())\n",
276283
" return _opener"
277284
]

0 commit comments

Comments
 (0)