Skip to content

Commit 19d0a48

Browse files
committed
updated CacheFilter to clean dead comments and import Paths/Path; improved StaticFileHandler path traversal logic for better security and simpler validation
1 parent 1df4286 commit 19d0a48

2 files changed

Lines changed: 15 additions & 9 deletions

File tree

src/main/java/org/example/CacheFilter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
package org.example;
33

44
import java.io.IOException;
5+
import java.nio.file.Path;
6+
import java.nio.file.Paths;
57
import java.util.Comparator;
68
import java.util.concurrent.ConcurrentHashMap;
79
import java.util.concurrent.atomic.AtomicLong;
@@ -68,6 +70,8 @@ public byte[] getOrFetch(String uri, FileProvider provider) throws IOException {
6870
LOGGER.log(Level.FINE, "✓ Cache hit for: " + uri + " (from concurrent fetch)");
6971
return entry.data;
7072
}
73+
74+
7175

7276
// Fetch och cachelagra
7377
LOGGER.log(Level.FINE, "✗ Cache miss for: " + uri);
@@ -81,9 +85,6 @@ public byte[] getOrFetch(String uri, FileProvider provider) throws IOException {
8185
}
8286
}
8387

84-
/**
85-
* Lägg till i cache med eviction om nödvändigt (MÅSTE VARA UNDER LOCK)
86-
*/
8788
private void addToCacheUnsafe(String uri, byte[] data) {
8889
// Guard mot oversized entries som kan blockera eviction
8990
if (data.length > MAX_CACHE_BYTES) {

src/main/java/org/example/StaticFileHandler.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,17 +96,22 @@ private String sanitizeUri(String uri) {
9696
}
9797

9898
/**
99-
* Checks if the requested path attempts to traverse outside the web root.
100-
* Uses path normalization after decoding to catch traversal attempts.
99+
/**
100+
* Kontrollerar om den begärda sökvägen försöker traversera utanför webroten.
101+
* Använder sökvägsnormalisering efter avkodning för att fånga traversalförsök.
101102
*/
102103
private boolean isPathTraversal(String uri) {
103104
try {
104-
Path webRootPath = Paths.get(webRoot).toRealPath();
105+
// Använd absolutsökväg + normalisera istället för toRealPath() för att undvika
106+
// krav på att katalogen existerar och för att hantera symboliska länkar säkert
107+
Path webRootPath = Paths.get(webRoot).toAbsolutePath().normalize();
105108
Path requestedPath = webRootPath.resolve(uri).normalize();
106-
109+
110+
// Returnera true om den begärda sökvägen inte ligger under webroten
107111
return !requestedPath.startsWith(webRootPath);
108-
} catch (IOException e) {
109-
LOGGER.log(Level.WARNING, "Path traversal check failed for: " + uri, e);
112+
} catch (Exception e) {
113+
// Om något går fel under sökvägsvalideringen, tillåt inte åtkomst (säker utgång)
114+
LOGGER.log(Level.WARNING, "Sökvägstraversalkontroll misslyckades för: " + uri, e);
110115
return true;
111116
}
112117
}

0 commit comments

Comments
 (0)