Yol geçişi
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
OWASP kategorisi: MASVS-STORAGE: Depolama
Genel Bakış
Yol geçişi güvenlik açıkları, saldırganlar yolun bir bölümünü kontrol edebildiğinde ve bu bölüm daha sonra doğrulama yapılmadan dosya sistemi API'lerine aktarıldığında ortaya çıkar. Bu durum, yetkisiz dosya sistemi işlemlerine neden olabilir. Örneğin, bir saldırgan, hedeflenen dizinin dışına geçiş yaparak kaynak hedefini beklenmedik bir şekilde değiştirmek için ../
gibi özel karakterleri kullanabilir.
Etki
Etki, işleme ve dosya içeriğine bağlı olarak değişir ancak genellikle dosyaların üzerine yazılmasına (dosya yazarken), veri sızıntısına (dosya okurken) veya izin değişikliklerine (dosya ya da dizin izinlerini değiştirirken) neden olur.
Çözümler
File.getCanonicalPath()
kullanarak yolu standartlaştırın ve ön eki beklenen dizinle karşılaştırın:
Kotlin
@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
val f = File(path)
val canonicalPath = f.canonicalPath
require(canonicalPath.startsWith(expectedDir!!))
return f
}
Java
public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {
File f = new File(path);
String canonicalPath = f.getCanonicalPath();
if (!canonicalPath.startsWith(expectedDir)) {
throw new IllegalArgumentException();
}
return f;
}
Yalnızca beklenen sonuçların elde edilmesini sağlamak için doğrulama kullanmak da en iyi uygulamalardan biridir. Örnekler arasında aşağıdakiler sayılabilir:
- Yanlışlıkla üzerine yazmayı önlemek için dosyanın zaten mevcut olup olmadığı kontrol ediliyor.
- Veri sızıntısını veya izinlerin yanlışlıkla değiştirilmesini önlemek için hedeflenen dosyanın beklenen bir hedef olup olmadığını kontrol etme.
- İşlemin geçerli dizininin, standart yoldaki döndürülen değerde tam olarak beklendiği gibi olup olmadığını kontrol eder.
- İzin sisteminin açıkça işlem kapsamına alındığından emin olma (ör. hizmetlerin root olarak çalıştırılmadığından ve dizin izinlerinin belirtilen hizmet veya komut kapsamına alındığından emin olma).
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-26 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-26 UTC."],[],[],null,["# Path traversal\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-STORAGE: Storage](https://mas.owasp.org/MASVS/05-MASVS-STORAGE)\n\nOverview\n--------\n\nPath traversal vulnerabilities occur when an attacker can control part of the\npath that is then passed to the file system APIs without validation. This can\nlead to unauthorized file system operations. For example, an attacker might use\nspecial characters such as `../` to unexpectedly change the resource target, by\ntraversing outside of the targeted directory.\n\nImpact\n------\n\nThe impact varies depending on the operation and file content, but generally\nleads to a file overwrite (when writing files), data leak (when reading files),\nor permission changes (when changing file or directory permissions).\n\nMitigations\n-----------\n\nCanonicalize the path using [`File.getCanonicalPath()`](/reference/java/io/File#getCanonicalPath()) and compare the\nprefix with the expected directory: \n\n### Kotlin\n\n @Throws(IllegalArgumentException::class)\n fun saferOpenFile(path: String, expectedDir: String?): File {\n val f = File(path)\n val canonicalPath = f.canonicalPath\n require(canonicalPath.startsWith(expectedDir!!))\n return f\n }\n\n### Java\n\n public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {\n File f = new File(path);\n String canonicalPath = f.getCanonicalPath();\n if (!canonicalPath.startsWith(expectedDir)) {\n throw new IllegalArgumentException();\n }\n return f;\n }\n\nAn additional best practice is to use validation to ensure only expected\noutcomes occur. Examples include the following:\n\n- Checking if the file already exists to prevent an accidental overwrite.\n- Checking if the targeted file is an expected target to prevent leaking data or incorrectly changing permissions.\n- Checking if the current directory of the operation is exactly as expected in the return value from the canonical path.\n- Ensuring a permissions system is explicitly scoped to the operation, such as checking that it isn't running services as root, and ensuring that the directory permissions are scoped to the service or command specified."]]