Bosh sahifa Wiki Template Injection

Template Injection

Template Injection — ishonchsiz kiritma shablon dvigateli tomonidan oddiy ma’lumot emas, shablon ifodasi yoki kodi sifatida bajariladigan zaiflikdir. Server-side template injection serverda yuz beradi va dvigatel imkoniyatiga qarab fayl, konfiguratsiya yoki tizim resurslariga kirishga olib kelishi mumkin. Client-side holatda esa zarar brauzer kontekstida namoyon bo‘ladi va ko‘pincha XSS bilan yaqin bog‘liq bo‘ladi.

Ma’lumot va shablon chegarasi

Xavfsiz foydalanishda ishlab chiquvchi ishonchli shablonni yaratadi, foydalanuvchi qiymatlari esa kontekst obyektida ma’lumot sifatida beriladi. Dvigatel shu qiymatlarni kerakli HTML, URL yoki boshqa kontekst uchun kodlaydi. Zaiflik dastur foydalanuvchi matnidan yangi shablon tuzib, uni kompilyatsiya yoki render qilganda paydo bo‘ladi. Bunday paytda maxsus delimitrlar va ifodalar matn emas, boshqaruvchi sintaksisga aylanadi.

Oddiy HTML escaping bu muammoni har doim to‘xtatmaydi. Escaping ko‘pincha render natijasini brauzer uchun xavfsizlaydi, template injection esa undan oldin, shablon baholanayotgan bosqichda sodir bo‘ladi. Dvigatel obyekt atributlariga, yordamchi funksiyalarga yoki refleksiyaga kirish bersa, ta’sir yanada kengayadi. Turli dvigatellarning sintaksisi va sandbox modeli bir-biridan farq qiladi.

Xavfsiz loyihalash

Foydalanuvchiga erkin shablon yozish imkoniyati talab qilinmasa, shablon matni faqat ishonchli paket yoki server fayllaridan olinadi. Foydalanuvchi tanlovi oldindan tasdiqlangan shablon identifikatoriga xaritalanadi; yo‘l yoki shablon manbasi bevosita qabul qilinmaydi. Dinamik qiymatlar kontekstga qat’iy sxema bilan beriladi va dvigatelning avtomatik kontekstga mos kodlashi yoqiladi.

Elektron xat yoki hisobot konstruktori kabi haqiqatan foydalanuvchi shabloni zarur tizimda cheklangan DSL qo‘llash ma’qul. Ruxsat etilgan o‘zgaruvchilar va amallar allowlist bilan belgilanadi, funksiya chaqirish, import, fayl va tarmoq kirishi olib tashlanadi. Sandbox qo‘shimcha himoya, ammo dvigateldagi zaiflik yoki chetlab o‘tish ehtimoli sabab yagona chegara bo‘la olmaydi. Render jarayoni alohida, minimal vakolatli muhitda va qat’iy CPU, xotira hamda vaqt limitlarida bajariladi.

Tekshiruv va ekspluatatsiya ta’sirini kamaytirish

Kod ko‘rigida dinamik template compilation, render yoki unga teng API’ga qayerdan matn kelishi kuzatiladi. Statik tahlil ishonchsiz manbadan shablon bajarish nuqtasigacha oqimni aniqlashi mumkin. Sinovlar maxsus sintaksis oddiy matn sifatida qolishini yoki qat’iy rad etilishini tekshiradi. Xato xabarida dvigatel stack trace’i, fayl yo‘li va kontekstdagi maxfiy qiymatlar foydalanuvchiga ochilmaydi.

Render xizmati uchun least privilege, faqat o‘qiladigan fayl tizimi va cheklangan tarmoq chiqishi qo‘llanadi. Dvigatel hamda freymvork xavfsizlik yangilanishlari muntazam o‘rnatiladi. Telemetriya render xatolari, noodatiy murakkablik va limitdan oshgan ishlarni ko‘rsatadi, lekin shablondagi shaxsiy ma’lumotni to‘liq jurnalga yozmaydi.

Template Injection va XSS farqi

Server-side template injection dvigatelning serverdagi baholash imkoniyatini suiiste’mol qiladi, XSS esa yakuniy brauzer hujjatida zararli skript kontekstini yaratadi. Bir zaiflik ikkinchisini keltirib chiqarishi mumkin, ammo himoya nuqtalari boshqa: birinchisida shablon manbasi ishonchli saqlanadi, ikkinchisida chiqish HTML kontekstiga mos kodlanadi. Foydalanuvchiga Markdown yoki matn formatlash berish kerak bo‘lsa, umumiy template tilidan ko‘ra cheklangan parser va sanitizatsiya qilingan chiqish xavfsizroq. Shablon keshining kaliti ham tenant va ruxsat doirasini hisobga olishi kerak, aks holda bir mijoz natijasi boshqasiga chiqishi mumkin.

Shablon preview muhiti ham production bilan bir xil maxfiy kontekstga ulanmasligi kerak. Namuna ma’lumotlari sintetik bo‘ladi va preview natijasi faol skript bajarmaydigan izolyatsiyalangan frame yoki alohida origin’da ko‘rsatiladi.

Bog‘liq tushunchalar

Template engine, XSS, Sandbox, Input validation, Escaping, Least privilege, Secure coding