Skip to content

Commit 81787b3

Browse files
authored
fix API Request Parameters Logged Credential Masking in ApiServer (#12020)
1 parent d26122b commit 81787b3

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import java.util.HashSet;
4040
import java.util.Iterator;
4141
import java.util.List;
42+
import java.util.Arrays;
4243
import java.util.Map;
4344
import java.util.Set;
4445
import java.util.TimeZone;
@@ -244,6 +245,12 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
244245
@Inject
245246
private MessageBus messageBus;
246247

248+
private static final Set<String> sensitiveFields = new HashSet<>(Arrays.asList(
249+
"password", "secretkey", "apikey", "token",
250+
"sessionkey", "accesskey", "signature",
251+
"authorization", "credential", "secret"
252+
));
253+
247254
private static final ConfigKey<Integer> IntegrationAPIPort = new ConfigKey<>(ConfigKey.CATEGORY_ADVANCED
248255
, Integer.class
249256
, "integration.api.port"
@@ -610,10 +617,23 @@ public String handleRequest(final Map params, final String responseType, final S
610617
logger.error("invalid request, no command sent");
611618
if (logger.isTraceEnabled()) {
612619
logger.trace("dumping request parameters");
613-
for (final Object key : params.keySet()) {
614-
final String keyStr = (String)key;
615-
final String[] value = (String[])params.get(key);
616-
logger.trace(" key: " + keyStr + ", value: " + ((value == null) ? "'null'" : value[0]));
620+
621+
for (final Object key : params.keySet()) {
622+
final String keyStr = (String) key;
623+
final String[] value = (String[]) params.get(key);
624+
625+
String lowerKeyStr = keyStr.toLowerCase();
626+
boolean isSensitive = sensitiveFields.stream()
627+
.anyMatch(lowerKeyStr::contains);
628+
629+
String logValue;
630+
if (isSensitive) {
631+
logValue = "******"; // mask sensitive values
632+
} else {
633+
logValue = (value == null) ? "'null'" : value[0];
634+
}
635+
636+
logger.trace(" key: " + keyStr + ", value: " + logValue);
617637
}
618638
}
619639
throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "Invalid request, no command sent");

0 commit comments

Comments
 (0)