Skip to content

Commit 023d3ed

Browse files
author
Nestor Acuna-Blanco
committed
fix: auth leakage with basic authentication
1 parent 8a42d5c commit 023d3ed

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

src/RequestsLibrary/log.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from RequestsLibrary.utils import is_file_descriptor
66

77
LOG_CHAR_LIMIT = 10000
8+
AUTHORIZATION = 'Authorization'
89

910

1011
def log_response(response):
@@ -24,11 +25,14 @@ def log_request(response):
2425
else:
2526
original_request = request
2627
redirected = ""
28+
safe_headers = dict(original_request.headers)
29+
if AUTHORIZATION in safe_headers:
30+
safe_headers[AUTHORIZATION] = '*****'
2731
logger.info(
2832
"%s Request : " % original_request.method.upper()
2933
+ "url=%s %s\n " % (original_request.url, redirected)
3034
+ "path_url=%s \n " % original_request.path_url
31-
+ "headers=%s \n " % original_request.headers
35+
+ "headers=%s \n " % safe_headers
3236
+ "body=%s \n " % format_data_to_log_string(original_request.body)
3337
)
3438

utests/test_log.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,47 @@ def test_log_request(mocked_logger):
6060
"body=%s \n " % request.body)
6161

6262

63+
@mock.patch('RequestsLibrary.log.logger')
64+
def test_log_request_with_headers(mocked_logger):
65+
headers = {'User-Agent': 'python-requests/2.31.0',
66+
'Accept-Encoding': 'gzip, deflate',
67+
'Accept': '*/*',
68+
'Connection': 'keep-alive'}
69+
request = Request(method='get', url='http://mock.rulezz', headers=headers)
70+
request = request.prepare()
71+
response = mock.MagicMock()
72+
response.history = []
73+
response.request = request
74+
log_request(response)
75+
assert mocked_logger.info.call_args[0][0] == ("%s Request : " % request.method +
76+
"url=%s \n " % request.url +
77+
"path_url=%s \n " % request.path_url +
78+
"headers=%s \n " % request.headers +
79+
"body=%s \n " % request.body)
80+
81+
82+
@mock.patch('RequestsLibrary.log.logger')
83+
def test_log_request_with_headers_auth(mocked_logger):
84+
headers = {'User-Agent': 'python-requests/2.31.0',
85+
'Accept-Encoding': 'gzip, deflate',
86+
'Accept': '*/*',
87+
'Connection': 'keep-alive',
88+
'Authorization': 'some_token'}
89+
safe_headers = dict(headers)
90+
safe_headers['Authorization'] = '*****'
91+
request = Request(method='get', url='http://mock.rulezz', headers=headers)
92+
request = request.prepare()
93+
response = mock.MagicMock()
94+
response.history = []
95+
response.request = request
96+
log_request(response)
97+
assert mocked_logger.info.call_args[0][0] == ("%s Request : " % request.method +
98+
"url=%s \n " % request.url +
99+
"path_url=%s \n " % request.path_url +
100+
"headers=%s \n " % safe_headers +
101+
"body=%s \n " % request.body)
102+
103+
63104
@mock.patch('RequestsLibrary.log.logger')
64105
def test_log_request_with_redirect(mocked_logger):
65106
request = Request(method='get', url='http://mock.rulezz/redirected')

0 commit comments

Comments
 (0)