TSK-1103 Changed vulnerable logging messages
TSK-1103 Make method sanitizeLoggingMessage generic TSK-1103 Renamed method
This commit is contained in:
parent
aa36fc2131
commit
96f0b8bb15
|
|
@ -30,6 +30,7 @@ import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||||
import pro.taskana.common.internal.jobs.ClassificationChangedJob;
|
import pro.taskana.common.internal.jobs.ClassificationChangedJob;
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
import pro.taskana.common.internal.util.IdGenerator;
|
||||||
|
import pro.taskana.common.internal.util.LogSanitizer;
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
import pro.taskana.task.api.models.TaskSummary;
|
||||||
import pro.taskana.task.internal.TaskMapper;
|
import pro.taskana.task.internal.TaskMapper;
|
||||||
|
|
||||||
|
|
@ -221,7 +222,7 @@ public class ClassificationServiceImpl implements ClassificationService {
|
||||||
InvalidArgumentException {
|
InvalidArgumentException {
|
||||||
LOGGER.debug("entry to updateClassification(Classification = {})", classification);
|
LOGGER.debug("entry to updateClassification(Classification = {})", classification);
|
||||||
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
||||||
ClassificationImpl classificationImpl = null;
|
ClassificationImpl classificationImpl;
|
||||||
try {
|
try {
|
||||||
taskanaEngine.openConnection();
|
taskanaEngine.openConnection();
|
||||||
if (classification.getKey().equals(classification.getParentKey())) {
|
if (classification.getKey().equals(classification.getParentKey())) {
|
||||||
|
|
@ -357,7 +358,7 @@ public class ClassificationServiceImpl implements ClassificationService {
|
||||||
LOGGER.warn(
|
LOGGER.warn(
|
||||||
"Method createClassification: Classification does already exist "
|
"Method createClassification: Classification does already exist "
|
||||||
+ "in master domain. Classification {}.",
|
+ "in master domain. Classification {}.",
|
||||||
masterClassification);
|
LogSanitizer.stripLineBreakingChars(masterClassification));
|
||||||
} finally {
|
} finally {
|
||||||
if (!doesExist) {
|
if (!doesExist) {
|
||||||
classificationMapper.insert(masterClassification);
|
classificationMapper.insert(masterClassification);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import pro.taskana.common.api.TimeInterval;
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||||
import pro.taskana.common.api.exceptions.TaskanaException;
|
import pro.taskana.common.api.exceptions.TaskanaException;
|
||||||
import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
|
import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
|
||||||
|
import pro.taskana.common.internal.util.LogSanitizer;
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
import pro.taskana.task.api.models.TaskSummary;
|
||||||
|
|
||||||
/** Job to cleanup completed tasks after a period of time. */
|
/** Job to cleanup completed tasks after a period of time. */
|
||||||
|
|
@ -178,15 +179,15 @@ public class TaskCleanupJob extends AbstractTaskanaJob {
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> tasksIdsToBeDeleted =
|
List<String> tasksIdsToBeDeleted =
|
||||||
tasksToBeDeleted.stream().map(task -> task.getId()).collect(Collectors.toList());
|
tasksToBeDeleted.stream().map(TaskSummary::getId).collect(Collectors.toList());
|
||||||
BulkOperationResults<String, TaskanaException> results =
|
BulkOperationResults<String, TaskanaException> results =
|
||||||
taskanaEngineImpl.getTaskService().deleteTasks(tasksIdsToBeDeleted);
|
taskanaEngineImpl.getTaskService().deleteTasks(tasksIdsToBeDeleted);
|
||||||
LOGGER.debug("{} tasks deleted.", tasksIdsToBeDeleted.size() - results.getFailedIds().size());
|
LOGGER.debug("{} tasks deleted.", tasksIdsToBeDeleted.size() - results.getFailedIds().size());
|
||||||
for (String failedId : results.getFailedIds()) {
|
for (String failedId : results.getFailedIds()) {
|
||||||
LOGGER.warn(
|
LOGGER.warn(
|
||||||
"Task with id {} could not be deleted. Reason: {}",
|
"Task with id {} could not be deleted. Reason: {}",
|
||||||
failedId,
|
LogSanitizer.stripLineBreakingChars(failedId),
|
||||||
results.getErrorForId(failedId));
|
LogSanitizer.stripLineBreakingChars(results.getErrorForId(failedId)));
|
||||||
}
|
}
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"exit from deleteTasks(), returning {}",
|
"exit from deleteTasks(), returning {}",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package pro.taskana.common.internal.util;
|
||||||
|
|
||||||
|
public class LogSanitizer {
|
||||||
|
|
||||||
|
private LogSanitizer() {
|
||||||
|
throw new IllegalStateException("Utility class");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes characters which break the log file pattern. Protects against injection attacks.
|
||||||
|
*
|
||||||
|
* @param loggingMessage String which should be sanitized
|
||||||
|
* @return sanitized logging message
|
||||||
|
*/
|
||||||
|
public static String stripLineBreakingChars(Object loggingMessage) {
|
||||||
|
return loggingMessage.toString().replaceAll("[\n|\r|\t]", "_");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,6 +10,7 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
import pro.taskana.common.api.TaskanaEngine;
|
||||||
|
import pro.taskana.common.internal.util.LogSanitizer;
|
||||||
import pro.taskana.spi.routing.api.TaskRoutingProvider;
|
import pro.taskana.spi.routing.api.TaskRoutingProvider;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
||||||
|
|
@ -75,9 +76,13 @@ public final class TaskRoutingManager {
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
if (workbasketIds.isEmpty()) {
|
if (workbasketIds.isEmpty()) {
|
||||||
LOGGER.error("No TaskRouter determined a workbasket for task {}.", task);
|
LOGGER.error(
|
||||||
|
"No TaskRouter determined a workbasket for task {}.",
|
||||||
|
LogSanitizer.stripLineBreakingChars(task));
|
||||||
} else if (workbasketIds.size() > 1) {
|
} else if (workbasketIds.size() > 1) {
|
||||||
LOGGER.error("The TaskRouters determined more than one workbasket for task {}", task);
|
LOGGER.error(
|
||||||
|
"The TaskRouters determined more than one workbasket for task {}",
|
||||||
|
LogSanitizer.stripLineBreakingChars(task));
|
||||||
} else {
|
} else {
|
||||||
workbasketId = workbasketIds.stream().findFirst().orElse(null);
|
workbasketId = workbasketIds.stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue