Canonical path — fayl tizimidagi obyektga olib boradigan yo‘lning . va .., takroriy separator, nisbiy ildiz hamda imkon bo‘lsa symbolic linklar yechilgan standart ko‘rinishidir. Canonicalization bir obyektni ifodalovchi turli matnli yo‘llarni taqqoslash va path traversal himoyasida ishlatiladi, lekin o‘zi to‘liq authorization emas.
Normalizatsiya va aniqlash
Lexical normalization filesystemga kirmasdan a/../b kabi segmentlarni soddalashtiradi. Real path esa mavjud komponentlarni ochib, symlinklarni nishoniga yechadi va absolute yo‘l qaytaradi. Fayl hali mavjud bo‘lmasa yoki ruxsat yetmasa real path muvaffaqiyatsiz bo‘lishi mumkin. Yangi fayl yaratishda parent katalog alohida canonical qilinadi.
Windows drive harfi, UNC share, case-insensitive nom va alternate data streamga ega. Unixda case odatda sezgir va root bitta slashdan boshlanadi. Unicode bir xil ko‘rinadigan nomni turli code point ketma-ketligida saqlashi mumkin. Platforma path kutubxonasi ishlatiladi; URL path qoidalarini filesystemga qo‘lda ko‘chirish xavfli.
Chegara tekshiruvi
Ruxsat etilgan root canonical qilinadi, candidate ham xuddi shu usulda aniqlanadi. Candidate rootning path component bo‘yicha descendant’i bo‘lishi kerak. Oddiy string prefix separator va case qoidalarini noto‘g‘ri talqin qiladi. Rootning o‘zi ruxsat etilganmi yoki faqat ichidagi fayllarmi siyosatda belgilanadi.
Symlink tekshiruvdan keyin almashtirilsa, canonical natija eskiradi. Xavfsiz open directory handle va relative path bilan, har segmentda symlink kuzatmaslik flagi orqali bajariladi. File descriptor ochilgach uning metadata’si tekshirilishi mumkin. Bu TOCTOU oynasini kamaytiradi.
Boshqa qo‘llanishlar
Build tizimi bir source faylning turli relative yo‘l bilan ikki marta import qilinishini canonical key bilan oldini oladi. Cache key yo‘lning normal ko‘rinishiga tayanadi, ammo mount namespace yoki symlink o‘zgarsa bir xil matn boshqa obyektni ko‘rsatishi mumkin. Container ichidagi canonical yo‘l hostdagi yo‘l bilan bir xil emas.
Web canonical URL filesystem canonical path’dan boshqa tushuncha: u qidiruv tizimiga afzal sahifa manzilini bildiradi. Xavfsizlik kodida bu ikki atama aralashtirilmaydi. URL decode soni, query va percent encoding alohida qatlamda boshqariladi.
Testlar mavjud va mavjud bo‘lmagan fayl, symlink chain, permission error, mixed separator, rootga teng yo‘l, case farqi va race holatini qamrab oladi. Xato xabari serverning absolute ichki yo‘lini klientga ochmaydi.
Amaliy nazorat
Canonical tekshiruvdan keyin symlink almashtirilishi TOCTOU yaratadi; directory handle’ga nisbiy no-follow open xavfsizroq. Canonical path 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.
Canonicalizatsiya funksiyasining xato holati ham xavfsizlik qaroridir: yo‘lni yechib bo‘lmasa operatsiya rad etiladi, taxminiy normalizatsiya bilan davom etilmaydi. Platformaga bog‘liq case folding va tarmoq share semantikasi hujjatlashtirilib, aynan deployment fayl tizimida sinovdan o‘tkaziladi.
Bog‘liq tushunchalar
Path Traversal, Symlink, Real path, Path normalization, TOCTOU, File descriptor, Filesystem