Skip to content

Commit 1850c21

Browse files
committed
Fixes #19265: Strip linebreaks from URLs for logging
1 parent 13ddd5f commit 1850c21

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

netbox/account/views.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from netbox.views import generic
2929
from users import forms, tables
3030
from users.models import UserConfig
31+
from utilities.string import remove_linebreaks
3132
from utilities.views import register_model_view
3233

3334

@@ -133,7 +134,8 @@ def post(self, request):
133134
return response
134135

135136
else:
136-
logger.debug(f"Login form validation failed for username: {form['username'].value()}")
137+
username = form['username'].value()
138+
logger.debug(f"Login form validation failed for username: {remove_linebreaks(username)}")
137139

138140
return render(request, self.template_name, {
139141
'form': form,
@@ -145,10 +147,10 @@ def redirect_to_next(self, request, logger):
145147
redirect_url = data.get('next', settings.LOGIN_REDIRECT_URL)
146148

147149
if redirect_url and url_has_allowed_host_and_scheme(redirect_url, allowed_hosts=None):
148-
logger.debug(f"Redirecting user to {redirect_url}")
150+
logger.debug(f"Redirecting user to {remove_linebreaks(redirect_url)}")
149151
else:
150152
if redirect_url:
151-
logger.warning(f"Ignoring unsafe 'next' URL passed to login form: {redirect_url}")
153+
logger.warning(f"Ignoring unsafe 'next' URL passed to login form: {remove_linebreaks(redirect_url)}")
152154
redirect_url = reverse('home')
153155

154156
return HttpResponseRedirect(redirect_url)

netbox/utilities/string.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
__all__ = (
2+
'remove_linebreaks',
23
'title',
34
'trailing_slash',
45
)
56

67

8+
def remove_linebreaks(value):
9+
"""
10+
Remove all line breaks from a string and return the result. Useful for log sanitization purposes.
11+
"""
12+
return value.replace('\n', '').replace('\r', '')
13+
14+
715
def title(value):
816
"""
917
Improved implementation of str.title(); retains all existing uppercase letters.

0 commit comments

Comments
 (0)