Skip to content

Commit e19e696

Browse files
committed
Redact sensitive duplicate query parameter values
1 parent 40e0ad6 commit e19e696

4 files changed

Lines changed: 31 additions & 27 deletions

File tree

‎server/src/main/java/com/cloud/api/ApiServer.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -521,8 +521,9 @@ public void handle(final HttpRequest request, final HttpResponse response, final
521521
}
522522
if(parameterMap.putIfAbsent(param.getName(), new String[]{param.getValue()}) != null) {
523523
String message = String.format("Query parameter '%s' has multiple values %s. Only the last value will be respected." +
524-
"It is advised to pass only a single parameter", param.getName(),
525-
StringUtils.formatValuesForLog(param.getName(), (String[]) parameterMap.get(param.getName())));
524+
" It is advised to pass only a single parameter", param.getName(),
525+
StringUtils.formatValuesForLog(param.getName(),
526+
new String[]{param.getValue(), ((String[]) parameterMap.get(param.getName()))[0]}));
526527
logger.warn(StringUtils.cleanString(message));
527528
}
528529
}

‎server/src/test/java/com/cloud/api/ApiServletTest.java‎

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -432,29 +432,4 @@ public void testVerify2FAWhenExpectedCommandIsNotCalled() throws UnknownHostExce
432432

433433
Assert.assertEquals(false, result);
434434
}
435-
@Test
436-
public void testFormatValuesForLogMasksSensitiveParameters() {
437-
String result = ApiServlet.formatValuesForLog(
438-
"password",
439-
new String[]{"SECRET_ONE", "SECRET_TWO"});
440-
441-
Assert.assertEquals("[REDACTED, REDACTED]", result);
442-
}
443-
444-
@Test
445-
public void testFormatValuesForLogDoesNotMaskNormalParameters() {
446-
String result = ApiServlet.formatValuesForLog(
447-
"username",
448-
new String[]{"alice", "bob"});
449-
450-
Assert.assertEquals("[alice, bob]", result);
451-
}
452-
453-
@Test
454-
public void testIsSensitiveParameter() {
455-
Assert.assertTrue(ApiServlet.isSensitiveParameter("adminpassword"));
456-
Assert.assertTrue(ApiServlet.isSensitiveParameter("usersecretkey"));
457-
Assert.assertTrue(ApiServlet.isSensitiveParameter("sessiontoken"));
458-
Assert.assertFalse(ApiServlet.isSensitiveParameter("username"));
459-
}
460435
}

‎utils/src/main/java/com/cloud/utils/StringUtils.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.HashMap;
3030
import java.util.List;
3131
import java.util.Locale;
32+
import java.util.Map;
3233
import java.util.Set;
3334
import java.util.TreeSet;
3435
import java.util.regex.Matcher;

‎utils/src/test/java/com/cloud/utils/StringUtilsTest.java‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package com.cloud.utils;
2121

2222
import static org.junit.Assert.assertEquals;
23+
import static org.junit.Assert.assertFalse;
2324
import static org.junit.Assert.assertNotEquals;
2425
import static org.junit.Assert.assertTrue;
2526

@@ -262,4 +263,30 @@ public void testGetKeyValuePairWithSeparator() {
262263
assertEquals(key, output.first());
263264
assertEquals(value, output.second());
264265
}
266+
267+
@Test
268+
public void testFormatValuesForLogMasksSensitiveParameters() {
269+
String result = StringUtils.formatValuesForLog(
270+
"password",
271+
new String[]{"SECRET_ONE", "SECRET_TWO"});
272+
273+
assertEquals("[REDACTED, REDACTED]", result);
274+
}
275+
276+
@Test
277+
public void testFormatValuesForLogDoesNotMaskNormalParameters() {
278+
String result = StringUtils.formatValuesForLog(
279+
"username",
280+
new String[]{"alice", "bob"});
281+
282+
assertEquals("[alice, bob]", result);
283+
}
284+
285+
@Test
286+
public void testIsSensitiveParameter() {
287+
assertTrue(StringUtils.isSensitiveParameter("adminpassword"));
288+
assertTrue(StringUtils.isSensitiveParameter("usersecretkey"));
289+
assertTrue(StringUtils.isSensitiveParameter("sessiontoken"));
290+
assertFalse(StringUtils.isSensitiveParameter("username"));
291+
}
265292
}

0 commit comments

Comments
 (0)