§

Kirish

Rejim
Entity uslubi
Kodlash koʻlami
§

Chiqish

OʻzDSt ISO/IEC 27001 va OʻzDSt 1092 davlat standartlari veb-ilovalar chiqish kodlashini axborot xavfsizligining majburiy qatlami sifatida belgilaydi — maxsus belgilarni entity sifatida kodlamaslik XSS zaifligi uchun toʻgʻridan-toʻgʻri sabab hisoblanadi. Oʻzbekiston Kibxavfsizlik markazi (Cyber Security Center) veb-dasturchilar uchun chiqargan xavfsiz ishlab chiqish qoʻllanmasida HTML body va atribut kontekstlarida entity kodlash qoʻllanilishi talab etiladi. Amaliyotda OASIS integratsiya serverlari va HUMO bank toʻlov shakllarida foydalanuvchi kiritgan matnlar entity kodlovchidan oʻtkazilmasa, XML validatori so'rovni rad etadi. Ushbu brauzer vositasi hech qanday ma'lumot tashqariga chiqarmaydi va audit talablariga toʻla mos keladi.

HTML entity kodlash qanday ishlaydi

HTML entity — brauzer tahlil paytida yagona belgiga aylantiriladigan belgi havolasi. Beshta zahiralangan HTML belgisi (<, >, &, ", ') matn HTML sifatida ko'rsatilganda har doim kodlashni talab qiladi; qolgan belgilar esa ixtiyoriy bo'lib, hujjat kodlashiga bog'liq.

  1. Rejim va koʻlamni tanlang. Kodlash rejimi kirishni belgilar bo'yicha aylanadi. Dekodlash rejimi kirishda entity naqshlarini qidiradi. Koʻlam tugmasi faqat beshta HTML-xavfsiz belgi kodlanadimi yoki ASCII bo'lmagan barcha kod nuqtalari ham qayta yoziladimi — shuni belgilaydi.
  2. Entity uslubini tanlang. Nomlangan entity-lar (&copy;) manbada oʻqish uchun qulay. Oʻnlik (&#169;) va hex (&#xA9;) havolalar nom talab qilmasdan har qanday Unicode kod nuqtasini ifodalaydi. Eski elektron pochta mijozlari va XML tahlilchilari raqamli shakllarni afzal ko'radi.
  3. Kirishni qayta ishlang. Kodlashda har bir kod nuqtasi o'qilib, taxminan 200 ta keng tarqalgan nomlangan entity jadvaliga qarab tekshiriladi. Mos kelmasa, raqamli shaklga o'tadi. Dekodlashda &name;, &#NNN; va &#xHH; ni bir yoʻlda qidiradigan yagona regex ishlatiladi.
  4. Belgilarga moslashtirish. Nomlangan moslamalar teskari jadval orqali hal qilinadi. Raqamli moslamalar String.fromCodePoint orqali 10 yoki 16 asosda qayta ishlanadi. Noma'lum nomlangan entity-lar o'zgartirilmaydi, shuning uchun qisman kiritish yo'qotishlarsiz qaytariladi.
  5. Jonli rejim. Jonli rejimni yoqing va har bir tugma bosishda 150 ms kechikish bilan aylantirish qaytadan bajariladi. Shablonga joylashtirmasdan oldin qisqichani sozlayotganda darhol natijani koʻrish uchun qulay.

Nima uchun HTML entity-larni kodlash kerak

  • Foydalanuvchi kiritmasini buzilishdan saqlang. Foydalanuvchi izoh qutisiga stray < kiritganda, bu matnni HTML ga to'g'ridan-to'g'ri qo'shish sahifaning qolgan qismini qayta yozadi. Zahiralangan belgilarni avval kodlash brauzerning belgini teg boshi sifatida emas, belgi sifatida ko'rsatishini ta'minlaydi.
  • Atribut qiymatlarini yaroqli saqlang. HTML atributida qoʻshtirnoqli satrni joylashtirish uchun ichki qoʻshtirnoqni &quot; (juft qoʻshtirnoqli atributlar uchun) yoki &#39; (yakka qoʻshtirnoqli) bilan almashtirish kerak. Aks holda tahlilchi atributni erta yopadi va qolgan satr tegishsiz belgilarga aylanadi.
  • Saqlangan ma'lumotlardagi tasodifiy HTML ni zararsizlantiring. Jurnallar, xato hisobotlari va chat eksportlari ko'pincha haqiqiy burchak qavslar va ampersandlarni o'z ichiga oladi. Hujjat sahifasiga joylashtirishdan oldin dump-ni entity kodlash bu matnni ko'rinadigan ko'rinishda saqlaydi — rendlaychi yoki havola avtomatik aniqlovchini ishga tushirmaydi.
  • Kod qismlarini xavfsiz ulashing. Blog postida, elektron pochtada yoki Slack xabarida <script>alert(1)</script> kabi namuna teg joylashtirish uchun qavslarni kodlash kerak — shunda qism ishlaydi emas, ko'rinadi. Bir xil usul RSS oziqlanma tanasi va JSON-LD `description` maydonlarini ham qamrab oladi.

Keng tarqalgan qo'llanilishlar

Entity kodlash xom matn ish vaqtida HTML ga qo'shilgan har yerda paydo bo'ladi — framework odatda uni avtomatik bajarsa ham, qilmaydigan paytlarda qoʻlda vosita foydali.

  • Server tomonidan render qilinadigan shablonlar: Jinja2, ERB, Twig va Handlebars sukut bo'yicha avtomatik escape qiladi, lekin xom bloklar va `safe` belgilari buni o'chiradi — kodek escape qanday natija berganini tekshirish imkonini beradi.
  • Elektron pochta va xabarnoma muallifi: ko'plab ESP shablon tizimlari birlashtirish maydonlarini avtomatik escape qilmaydi, shuning uchun foydalanuvchi nomlaridagi aqlli qoʻshtirnoqlar va mualliflik huquqi belgilari oldindan kodlashni talab qiladi.
  • Hujjatlar va kod namunalari: Markdown blog postiga yoki statik sayt qismiga namuna HTML teg joylashtirishda rendlaychi uni koʻrinadigan matn sifatida ko'rishi uchun qavslarni kodlash kerak.

Amaliy misol

<script>alert('hi')</script> ni kirish maydoniga joylashtiring, rejim Kodlash, uslub Nomlangan, koʻlam Minimal holatida. Chiqish: &lt;script&gt;alert(&#39;hi&#39;)&lt;/script&gt;. Uslubni Raqamli hex ga o'zgartiring va bir xil kirish &#x3C;script&#x3E;alert(&#x27;hi&#x27;)&#x3C;/script&#x3E; hosil qiladi. Rejimni Dekodlashga o'tkazing, kodlangan satrni qaytadan joylashtiring — asl teg o'zgarmagan holda qaytadi.

FAQ

HTML entity-lar nima?

HTML entity-lar — brauzer sahifani tahlil qilganda yagona belgiga almashtiriladigan belgi havolalari. Ular uch shaklda keladi: nomlangan (masalan &amp;& uchun), oʻnlik raqamli (&#38;) va hex raqamli (&#x26;). Beshta zahiralangan HTML belgisi (<, >, &, ", ') matn HTML ga qoʻshilganda har doim kodlashni talab qiladi. Qolgan taxminan 2 225 ta nomlangan entity ramzlar, urg'ular va grek harflarini qamrab oladi, lekin hujjat kodlashi UTF-8 boʻlsa ixtiyoriy.

Qachon nomlangan, qachon raqamli entity ishlatish kerak?

Manbani oʻqilishi oson boʻlishini xohlasangiz nomlangan entity ishlating (shablonni koʻrib chiqayotgan dasturchi &copy; ni darhol tushunadi). Iste'molchi eski yoki qattiqroq boʻlsa — XML tahlilchilar, eski elektron pochta mijozlari va baʼzi tasmali oʻquvchilar HTML5 nomlangan entity-larining kichik qismini taniydi, lekin raqamli shakllarni hammasi ham taniydi. Hex xavfsizlikka yoʻnaltirilgan kontekstlarda ustun keladi, chunki u spec hujjatlarida ishlatiladigan Unicode kod nuqtasi belgisi bilan bir xil.

Dekodlash & kabi hex entity-larni qayta ishlayaptimi?

Ha. Dekodlaychi bir yoʻlda barcha uch entity shaklini qidiradiganyagona regex ishlatadi: &name;, &#NNN; va &#xHH;. Raqamli moslamalar String.fromCodePoint orqali 10 yoki 16 asosda hal qilinadi. Aralash kirish (bir satrda nomlangan va raqamli) toʻgʻri dekodlanadi; noma'lum nomlar harafiy matn sifatida qoladi, shuning uchun qisman kirish yo'qotishlarsiz qaytariladi.

Bu ishonchsiz kirish bilan xavfsiz foydalanish uchun mos keladi?

Kodek butunlay brauzer ichida ishlaydi va kirishingizni hech qerga yubormaydii. Chiqish joylashtirish uchun xavfsizmi — bu kontekstga bogʻliq. Entity kodlash HTML tanasi va atribut qiymati kontekstlarini qamrab oladi. JavaScript kontekstlari (inline hodisa ishlovchilari, `<script>` bloklari), CSS kontekstlari va URL kontekstlari har biri oʻziga xos kodlash qoidasini talab qiladi — faqat entity kodlash u yerlar uchun yetarli emas. Server tomonida himoyani chuqurlashtirish uchun DOMPurify yoki frameworkning avtomatik escape tizimi bilan birlashtiring.

Brauzer tomonida entity kodlash foydalanuvchi kiritishi va render qilingan HTML oʻrtasidagi chegarada joylashadi. Aylantirish mahalliy bajarilishi framework chiqargan natijani tekshirish imkonini beradi — asl matnni uchinchi tomon vositasiga yubormasdan.