Path Traversal — foydalanuvchi boshqaradigan yo‘l segmentlari yordamida dastur belgilangan katalog chegarasidan tashqaridagi fayl yoki papkaga murojaat qiladigan zaiflikdir. U o‘qish, yozish, o‘chirish, arxivdan chiqarish va upload nomini saqlash funksiyalarida uchraydi. Natija file disclosure, konfiguratsiya buzilishi yoki kod joylashtirish bo‘lishi mumkin.
Yo‘l talqini
.. parent katalogni bildiradi, ammo hujum faqat shu ikki belgidan iborat emas. URL encoding, ikki marta decoding, Unicode separator, Windows drive va UNC yo‘li, absolute slash, redundant nuqta hamda mixed separator turli qatlamlarda boshqa talqin qilinadi. Validatsiya decode’dan oldin bajarilib, filesystem esa keyin boshqa yo‘l ko‘rsa filtr chetlab o‘tiladi.
Canonicalization . va .. ni yechib, absolute normal yo‘l beradi. Natija ruxsat etilgan rootning haqiqiy child’i ekanligi path-aware API bilan tekshiriladi; oddiy startswith /safe-files bilan /safe-files-evilni aralashtirishi mumkin. Case-insensitive filesystem va Unicode normalizatsiyasi ham hisobga olinadi.
Symlink va race
Canonical path tekshirilgach hujumchi symlinkni almashtira olsa, open vaqtida boshqa nishon tanlanadi. Bu time-of-check to time-of-use muammosidir. Directory file descriptor’iga nisbiy open, no-follow flag va platformaning secure resolve API’si yo‘lning har segmentini kutilgan ildiz ichida ushlaydi. Ish katalogi o‘zgarishiga tayanish yetarli himoya emas.
Arxiv ichidagi entry nomi ham traversal bo‘lishi mumkin. Extractor har entry uchun destinationni hisoblab root ichida qolishini tekshiradi, absolute va symlink entrylarni siyosat bo‘yicha rad etadi. Ochilgan umumiy hajm va fayl soni ham zip bombga qarshi cheklanadi.
Dizayn va himoya
Eng yaxshi API tashqi foydalanuvchidan filesystem path olmaydi. Opaque object ID database’dagi storage keyga server tomonda xaritalanadi. Download authorization obyekt egasi va tenantga qarab tekshiriladi. Original filename faqat metadata, real saqlash nomi tasodifiy ID bo‘ladi.
Jarayon minimal katalog ruxsatlarida ishlaydi va web rootga yozmaydi. Sensitive secretlar xizmat o‘qiy olmaydigan alohida store’da saqlanadi. WAF traversal naqshini signal qilishi mumkin, lekin turli encoding va biznes API sabab kod darajasidagi himoyani almashtirmaydi.
Fuzz test parser va filesystem talqinining chegaralarini qamrab oladi. Windows va Unix targetlari alohida sinovdan o‘tadi. Rad etilgan pathlar jurnalga xavfsiz, control characterlarsiz yoziladi. Hodisada o‘qilgan yoki yozilgan fayl doirasi, credential rotatsiyasi va integrity tekshiruvi bajariladi.
Amaliy nazorat
Arxiv entrylari uchun ham canonical destination root ichida qolishi, symlink va absolute yo‘l rad etilishi kerak. Path Traversal bo‘yicha nazorat faqat bitta input filterga tayanmaydi. API erkin sintaksis o‘rniga aniq identifikator va typed parametr qabul qiladi, jarayon esa least privilege bilan ishlaydi. Normal holat bilan birga encoding, duplicate, timeout, parallel so‘rov va qisman nosozlik test qilinadi. Production telemetry xato turi, kechikish va rad etilgan urinishlarni ko‘rsatadi, maxfiy payloadni to‘liq jurnalga yozmaydi. O‘zgarish avval kichik doirada sinovdan o‘tib, regression kuzatilmagach kengaytiriladi. Incident runbook ta’sirlangan obyektlarni aniqlash, credential yoki holatni tiklash va sababni kod darajasida bartaraf etishni belgilaydi.
Fayl identifikatorini klient yo‘liga aylantirish o‘rniga server tomondagi metadata jadvalidan foydalanish hujum yuzasini qisqartiradi. Yuklab olish javobida nom faqat Content-Disposition uchun xavfsiz kodlanadi; diskdagi haqiqiy manzil esa API javobi va audit tafsilotlarida ochilmaydi.
Bog‘liq tushunchalar
Canonical path, Local File Inclusion, Symlink, File disclosure, Zip Slip, TOCTOU, Input validation