소스 검색

Fixes #19265: Strip linebreaks from URLs for logging

Jeremy Stretch 10 달 전
부모
커밋
1850c21714
2개의 변경된 파일13개의 추가작업 그리고 3개의 파일을 삭제
  1. 5 3
      netbox/account/views.py
  2. 8 0
      netbox/utilities/string.py

+ 5 - 3
netbox/account/views.py

@@ -28,6 +28,7 @@ from netbox.config import get_config
 from netbox.views import generic
 from users import forms, tables
 from users.models import UserConfig
+from utilities.string import remove_linebreaks
 from utilities.views import register_model_view
 
 
@@ -133,7 +134,8 @@ class LoginView(View):
             return response
 
         else:
-            logger.debug(f"Login form validation failed for username: {form['username'].value()}")
+            username = form['username'].value()
+            logger.debug(f"Login form validation failed for username: {remove_linebreaks(username)}")
 
         return render(request, self.template_name, {
             'form': form,
@@ -145,10 +147,10 @@ class LoginView(View):
         redirect_url = data.get('next', settings.LOGIN_REDIRECT_URL)
 
         if redirect_url and url_has_allowed_host_and_scheme(redirect_url, allowed_hosts=None):
-            logger.debug(f"Redirecting user to {redirect_url}")
+            logger.debug(f"Redirecting user to {remove_linebreaks(redirect_url)}")
         else:
             if redirect_url:
-                logger.warning(f"Ignoring unsafe 'next' URL passed to login form: {redirect_url}")
+                logger.warning(f"Ignoring unsafe 'next' URL passed to login form: {remove_linebreaks(redirect_url)}")
             redirect_url = reverse('home')
 
         return HttpResponseRedirect(redirect_url)

+ 8 - 0
netbox/utilities/string.py

@@ -1,9 +1,17 @@
 __all__ = (
+    'remove_linebreaks',
     'title',
     'trailing_slash',
 )
 
 
+def remove_linebreaks(value):
+    """
+    Remove all line breaks from a string and return the result. Useful for log sanitization purposes.
+    """
+    return value.replace('\n', '').replace('\r', '')
+
+
 def title(value):
     """
     Improved implementation of str.title(); retains all existing uppercase letters.