You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by as...@apache.org on 2020/10/25 12:04:01 UTC

[cxf] 01/01: CXF-8359: fixed mask for XML elements containing attributes

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

ashakirin pushed a commit to branch CXF-8359_mask_senstive_logging_fix_attribute
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 2f4a36ea8ab2c23b8ccfd9522a948b5aca3fe39c
Author: ashakirin <49...@users.noreply.github.com>
AuthorDate: Sun Oct 25 13:03:39 2020 +0100

    CXF-8359: fixed mask for XML elements containing attributes
---
 .../apache/cxf/ext/logging/MaskSensitiveHelper.java   | 19 ++++++++++++-------
 .../cxf/ext/logging/MaskSensitiveHelperTest.java      |  6 ++++++
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java
index f8c5b25..f9cf1a9 100644
--- a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java
+++ b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java
@@ -20,6 +20,7 @@ package org.apache.cxf.ext.logging;
 
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.regex.Pattern;
 
@@ -27,9 +28,9 @@ import org.apache.cxf.message.Message;
 
 public class MaskSensitiveHelper {
     private static final String ELEMENT_NAME_TEMPLATE = "-ELEMENT_NAME-";
-    private static final String MATCH_PATTERN_XML_TEMPLATE = "<-ELEMENT_NAME->(.*?)</-ELEMENT_NAME->";
+    private static final String MATCH_PATTERN_XML_TEMPLATE = "(<-ELEMENT_NAME-.*>)(.*?)(</-ELEMENT_NAME->)";
+    private static final String REPLACEMENT_XML_TEMPLATE = "$1XXX$3";
     private static final String MATCH_PATTERN_JSON_TEMPLATE = "\"-ELEMENT_NAME-\"[ \\t]*:[ \\t]*\"(.*?)\"";
-    private static final String REPLACEMENT_XML_TEMPLATE = "<-ELEMENT_NAME->XXX</-ELEMENT_NAME->";
     private static final String REPLACEMENT_JSON_TEMPLATE = "\"-ELEMENT_NAME-\": \"XXX\"";
     private static final String MASKED_HEADER_VALUE = "XXX";
 
@@ -70,15 +71,19 @@ public class MaskSensitiveHelper {
             final Message message,
             final String originalLogString) {
         if (replacementsXML.isEmpty() && replacementsJSON.isEmpty()
-                || message == null
                 || originalLogString == null) {
             return originalLogString;
         }
-        final String contentType = (String) message.get(Message.CONTENT_TYPE);
-        if (contentType.toLowerCase().contains(XML_CONTENT)
-                || contentType.toLowerCase().contains(HTML_CONTENT)) {
+        final Optional<String> contentType = Optional.ofNullable(message)
+                .map(m -> (String) m.get(Message.CONTENT_TYPE));
+        if (!contentType.isPresent()) {
+            return originalLogString;
+        }
+        final String lowerCaseContentType = contentType.get().toLowerCase();
+        if (lowerCaseContentType.contains(XML_CONTENT)
+                || lowerCaseContentType.contains(HTML_CONTENT)) {
             return applyMasks(originalLogString, replacementsXML);
-        } else if (contentType.toLowerCase().contains(JSON_CONTENT)) {
+        } else if (lowerCaseContentType.contains(JSON_CONTENT)) {
             return applyMasks(originalLogString, replacementsJSON);
         }
         return originalLogString;
diff --git a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java
index 3e1f5d1..a6d6f3a 100644
--- a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java
+++ b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java
@@ -50,6 +50,11 @@ public class MaskSensitiveHelperTest {
     private static final String MASKED_LOGGING_CONTENT_XML =
             "<user>testUser</user><password>XXX</password>";
 
+    private static final String SENSITIVE_LOGGING_CONTENT_XML_WITH_ATTRIBUTE =
+            "<user>testUser</user><password myAttribute=\"test\">my secret password</password>";
+    private static final String MASKED_LOGGING_CONTENT_XML_WITH_ATTRIBUTE =
+            "<user>testUser</user><password myAttribute=\"test\">XXX</password>";
+
     private static final String SENSITIVE_LOGGING_CONTENT_JSON =
             "\"user\":\"testUser\", \"password\": \"my secret password\"";
     private static final String MASKED_LOGGING_CONTENT_JSON =
@@ -73,6 +78,7 @@ public class MaskSensitiveHelperTest {
     public static Collection primeNumbers() {
         return Arrays.asList(new Object[][] {
             {SENSITIVE_LOGGING_CONTENT_XML, MASKED_LOGGING_CONTENT_XML, APPLICATION_XML},
+            {SENSITIVE_LOGGING_CONTENT_XML_WITH_ATTRIBUTE, MASKED_LOGGING_CONTENT_XML_WITH_ATTRIBUTE, APPLICATION_XML},
             {SENSITIVE_LOGGING_CONTENT_JSON, MASKED_LOGGING_CONTENT_JSON, APPLICATION_JSON}
         });
     }