Skip to content

Commit 2438877

Browse files
YLChen-007Locharla, Sandeep
authored andcommitted
fix API Request Parameters Logged Credential Masking in ApiServer (apache#12020)
1 parent ce67143 commit 2438877

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;
@@ -251,6 +252,12 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
251252
@Inject
252253
private MessageBus messageBus;
253254

255+
private static final Set<String> sensitiveFields = new HashSet<>(Arrays.asList(
256+
"password", "secretkey", "apikey", "token",
257+
"sessionkey", "accesskey", "signature",
258+
"authorization", "credential", "secret"
259+
));
260+
254261
private static final ConfigKey<Integer> IntegrationAPIPort = new ConfigKey<>(ConfigKey.CATEGORY_ADVANCED
255262
, Integer.class
256263
, "integration.api.port"
@@ -624,10 +631,23 @@ public String handleRequest(final Map params, final String responseType, final S
624631
logger.error("invalid request, no command sent");
625632
if (logger.isTraceEnabled()) {
626633
logger.trace("dumping request parameters");
627-
for (final Object key : params.keySet()) {
628-
final String keyStr = (String)key;
629-
final String[] value = (String[])params.get(key);
630-
logger.trace(" key: " + keyStr + ", value: " + ((value == null) ? "'null'" : value[0]));
634+
635+
for (final Object key : params.keySet()) {
636+
final String keyStr = (String) key;
637+
final String[] value = (String[]) params.get(key);
638+
639+
String lowerKeyStr = keyStr.toLowerCase();
640+
boolean isSensitive = sensitiveFields.stream()
641+
.anyMatch(lowerKeyStr::contains);
642+
643+
String logValue;
644+
if (isSensitive) {
645+
logValue = "******"; // mask sensitive values
646+
} else {
647+
logValue = (value == null) ? "'null'" : value[0];
648+
}
649+
650+
logger.trace(" key: " + keyStr + ", value: " + logValue);
631651
}
632652
}
633653
throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "Invalid request, no command sent");

0 commit comments

Comments
 (0)