mirror of https://github.com/hykilpikonna/AquaDX
[O] Protect against path traversal
parent
6bdfc69668
commit
5adbcc0aff
|
@ -19,6 +19,7 @@ import org.springframework.http.HttpHeaders
|
|||
import org.springframework.http.HttpStatus
|
||||
import org.springframework.http.ResponseEntity.BodyBuilder
|
||||
import org.springframework.web.bind.annotation.*
|
||||
import java.io.File
|
||||
import java.lang.reflect.Field
|
||||
import java.nio.charset.StandardCharsets
|
||||
import java.nio.file.Path
|
||||
|
@ -235,6 +236,7 @@ fun <T> Lock.maybeLock(block: () -> T) = if (tryLock()) try { block() } finally
|
|||
fun path(part1: Str, vararg parts: Str) = Path.of(part1, *parts)
|
||||
fun Str.path() = Path.of(this)
|
||||
operator fun Path.div(part: Str) = resolve(part)
|
||||
operator fun File.div(fileName: Str) = File(this, fileName)
|
||||
fun Str.ensureEndingSlash() = if (endsWith('/')) this else "$this/"
|
||||
|
||||
fun <T: Any> T.logger() = LoggerFactory.getLogger(this::class.java)
|
||||
|
|
|
@ -175,10 +175,12 @@ class Maimai2(
|
|||
SUCCESS
|
||||
}
|
||||
|
||||
val photoDir = UploadUserPhotoHandler.uploadDir.toFile().canonicalFile
|
||||
|
||||
@API("my-photo")
|
||||
suspend fun myPhoto(@RP token: Str) = us.jwt.auth(token) { u ->
|
||||
val find = "${u.ghostCard.extId}-"
|
||||
UploadUserPhotoHandler.uploadDir.toFile().listFiles()
|
||||
photoDir.listFiles()
|
||||
?.map { it.name }
|
||||
?.filter { it.startsWith(find) }
|
||||
?.sorted()
|
||||
|
@ -187,8 +189,9 @@ class Maimai2(
|
|||
|
||||
@API("my-photo/{fileName}", produces = [MediaType.IMAGE_JPEG_VALUE])
|
||||
suspend fun myPhoto(@RP token: Str, @PV fileName: Str) = us.jwt.auth(token) { u ->
|
||||
if (!fileName.startsWith("${u.ghostCard.extId}-")) (403 - "Not your photo")
|
||||
val f = (UploadUserPhotoHandler.uploadDir / fileName).toFile()
|
||||
val f = (photoDir / fileName)
|
||||
if (!f.canonicalFile.startsWith(photoDir)) (403 - "Never gonna give you up")
|
||||
if (!f.name.startsWith("${u.ghostCard.extId}-")) (403 - "Not your photo")
|
||||
if (!f.exists()) (404 - "Photo not found")
|
||||
f.readBytes()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue