Покрытие синопсиса по-прежнему возвращает путь к файловой системе, имя файла или манипуляции с URI в Java, несмотря на внесение рекомендуемого исправления.
Хотя эти два следующих вопроса дают объяснение того, что делать, они не могут исправить предупреждение, создаваемое инструментом.
Проблемы покрытия для манипуляций с путем файловой системы, именем файла или URI в Java
Как исправить «уязвимость манипулирования путем» в немного Java Код?
Чтобы внести ясность, прежде чем кто-то закроет этот дубликат, эти два ответа не решают проблему полностью.
Вот код, который имел первоначально последовало предупреждение, которое по-прежнему содержит предупреждение о закрытии пути к файловой системе, имени файла или манипуляции с URI.
Исходный код:
public String deleteFiles(List filesToDelete){
filesToDelete.forEach(file -> {
logger.info("Deleting file " + file);
Path path = Paths.get(file).normalize();
new File(path).delete();
});
}
Исправление кода, которое по-прежнему возвращает предупреждение о покрытии:
private static boolean doesFilenameTryPatternTraversal(String filename) {
return Pattern.compile("\\.\\.|\\|/").matcher(filename).find();
}
private void deleteFiles(List filesToDelete) {
filesToDelete.forEach(file -> {
logger.info("Deleting file {}", file);
if (doesFilenameTryPatternTraversal(file)) {
throw new RuntimeException(
"filename: '" + file + "' attempting to access a file outside of expected directory.");
}
Path canonicalPath = basePath.resolve(Paths.get(file).toAbsolutePath().normalize());
if (canonicalPath.startsWith(basePath.toString())) {
try {
Files.delete(canonicalPath);
} catch (IOException e) {
throw new RuntimeException("Could not delete file '" + file + "'.", e);
}
} else {
throw new SecurityException("File '" + file + "' is outside the allowed directory");
}
});
}
Подробнее здесь: https://stackoverflow.com/questions/763 ... ulation-in
Покрытие синопсиса по-прежнему возвращает путь к файловой системе, имя файла или манипуляцию с URI в Java, несмотря на в ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение