This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-post.git


The following commit(s) were added to refs/heads/master by this push:
     new 432f0ed  fix(security): sanitize redirect target in log messages to 
prevent log injection (#41)
432f0ed is described below

commit 432f0edbcbd5ae7c6b32140d38ebfd80d435e5c4
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Thu Jul 16 17:50:59 2026 +0200

    fix(security): sanitize redirect target in log messages to prevent log 
injection (#41)
    
    * fix(security): sanitize redirect target in log messages to prevent log 
injection
    
    Co-authored-by: Maia <maia@noreply>
    
    * fix(security): avoid eager redirect log sanitization
    
    ---------
    
    Co-authored-by: Maia <maia@noreply>
---
 .../sling/servlets/post/impl/SlingPostServlet.java | 26 ++++++++++++++++------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java 
b/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java
index fac783c..2c847d2 100644
--- a/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java
+++ b/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java
@@ -375,6 +375,10 @@ public class SlingPostServlet extends 
SlingJakartaAllMethodsServlet {
 
     private static final Pattern REDIRECT_WITH_SCHEME_PATTERN = 
Pattern.compile("^(https?://[^/]+)(.*)$");
 
+    private static String sanitizeForLog(final String value) {
+        return value == null ? null : value.replace('\r', '_').replace('\n', 
'_');
+    }
+
     /**
      * Creates an instance of a PostResponse.
      * @param req The request being serviced
@@ -463,22 +467,30 @@ public class SlingPostServlet extends 
SlingJakartaAllMethodsServlet {
                 URI redirectUri = new URI(encodedURL);
                 if (redirectUri.getAuthority() != null) {
                     // if it has a host information
-                    log.warn(
-                            "redirect target ({}) does include host 
information ({}). This is not allowed for security reasons!",
-                            result,
-                            redirectUri.getAuthority());
+                    if (log.isWarnEnabled()) {
+                        log.warn(
+                                "redirect target ({}) does include host 
information ({}). This is not allowed for security reasons!",
+                                sanitizeForLog(result),
+                                sanitizeForLog(redirectUri.getAuthority()));
+                    }
                     return null;
                 }
             } catch (URISyntaxException e) {
-                log.warn("given redirect target ({}) is not a valid uri: {}", 
result, e);
+                if (log.isWarnEnabled()) {
+                    log.warn("given redirect target ({}) is not a valid uri: 
{}", sanitizeForLog(result), e);
+                }
                 return null;
             }
 
-            log.debug("redirect requested as [{}] for path [{}]", result, 
ctx.getPath());
+            if (log.isDebugEnabled()) {
+                log.debug("redirect requested as [{}] for path [{}]", 
sanitizeForLog(result), ctx.getPath());
+            }
 
             result = handleStarResource(result, ctx, request);
 
-            log.debug("Will redirect to {}", result);
+            if (log.isDebugEnabled()) {
+                log.debug("Will redirect to {}", sanitizeForLog(result));
+            }
         }
         return encodeRedirectUrl(result, response, request);
     }

Reply via email to