Template engine — statik shablon va berilgan ma’lumot modelini birlashtirib HTML, matn, konfiguratsiya yoki boshqa hujjat hosil qiladigan dasturiy komponentdir. Shablonda o‘zgaruvchi, shart, sikl va formatlash ifodalari bo‘lishi mumkin. Dvigatel presentationni biznes logikasidan ajratadi, ammo bajariladigan sintaksis xavfsizlik chegarasini talab qiladi.
Render modeli
Engine shablonni parse qilib AST yoki bytecode’ga kompilyatsiya qiladi, keyin context qiymatlari bilan render qiladi. Compiled template cache har so‘rovda qayta parse xarajatini kamaytiradi. Cache key template versiyasi, locale va zarur konfiguratsiyani qamrab oladi; tenant ma’lumoti noto‘g‘ri umumiy cache’da aralashmasligi kerak.
Logic-less tizim faqat qiymat va oddiy section beradi. Kuchli tizim funksiya chaqirish, filter, macro, include va inheritance’ni qo‘llaydi. Imkoniyat ortishi reuse’ni yaxshilaydi, lekin shablonda yashirin biznes mantiqi va attack surface’ni ham oshiradi. Murakkab hisob controller yoki view modelda bajariladi.
Escaping
HTML auto-escaping qiymatni text kontekstida <, & kabi belgilarni kodlaydi. JavaScript, CSS, URL va HTML attribute kontekstlari boshqa qoidalarga ega. Bir kontekst uchun escaped qiymatni boshqasiga ko‘chirish XSS yaratishi mumkin. Engine context-aware escaping bersa, shablon strukturasi uning kontekstni aniqlashiga imkon beradi.
“Safe HTML” wrapper faqat ishonchli sanitizer yoki server yaratgan fragment uchun ishlatiladi. Foydalanuvchi matnini safe deb belgilash auto-escapingni chetlab o‘tadi. Double escaping ham matnni buzadi, shu sababli raw va encoded qiymat shartnomasi aniq bo‘ladi.
Include va xavfsizlik
Template nomi user path’dan tuzilmaydi; allowlist registry ishlatiladi. Foydalanuvchi yuborgan shablonni serverda umumiy engine bilan bajarish template injectionga olib keladi. Custom template zarur bo‘lsa, cheklangan DSL, sandbox, minimal context va resurs limiti qo‘llanadi. Sandbox yagona himoya emas.
Include cycle va chuqur recursion renderni tugatmasligi mumkin. Depth, output size va execution timeout cheklanadi. Remote include o‘chiriladi. Error response template source, absolute path va contextdagi secretlarni ochmaydi.
Template unit testi turli locale, bo‘sh qiymat, uzun matn va escaping holatini tekshiradi. Visual snapshot layout regressiyasini, security test esa maxsus belgilar kod sifatida bajarilmasligini tasdiqlaydi. Dependency versiyasi yangilanganda escaping va sandbox o‘zgarishlari release notes asosida tekshiriladi.
Amaliy nazorat
Context-aware escaping HTML text, attribute, URL va JavaScript joylari uchun boshqa kodlash qoidasini avtomatik tanlashga yordam beradi. Template engine 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.
Template cache ishlatilganda kalitga tenant, locale, tema va versiya kabi renderga ta’sir qiluvchi omillar kiradi. Noto‘g‘ri kalit bir foydalanuvchi mazmunini boshqasiga ko‘rsatishi mumkin. Cache invalidation deploy va tarjima yangilanishlari bilan muvofiqlashtiriladi, fragmentlar esa shaxsiy ma’lumot darajasiga ko‘ra ajratiladi.
Bog‘liq tushunchalar
Template Injection, Auto-escaping, XSS, View model, Include function, Sandbox, HTML sanitization