Jinsi usimbuaji wa viumbe vya HTML unavyofanya kazi
Kiumbe cha HTML ni rejeleo la herufi ambalo kivinjari huchambua tena kwenye herufi moja. Herufi tano zilizohifadhiwa za HTML (<, >, &, ", ') daima zinahitaji usimbuaji wakati maandishi yanatolewa kama HTML; kila kitu kingine ni cha hiari na kinategemea usimbuaji wa hati.
- Chagua hali na wigo. Hali ya Simba inatembea kwenye ingizo lako herufi kwa herufi. Hali ya Simbua inatembea kwenye ingizo ikitafuta mifumo ya viumbe. Togili ya wigo huamua kama ni herufi tano tu za HTML-salama zinazosimbwa, au kama kila nambari ya msimbo ya zisizo za ASCII pia inaandikwa upya.
- Chagua mtindo wa viumbe. Viumbe vilivyopewa jina (
©) vinasomeka vizuri kwenye chanzo. Marejeleo ya desimali (©) na marejeleo ya hex (©) hubeba kila nambari ya msimbo ya Unicode bila kuhitaji jina. Wateja wa zamani wa barua pepe na wachambua wa XML wanapendelea muundo wa nambari. - Tembea ingizo. Wakati wa kusimba, husoma kila nambari ya msimbo na kuiangalia dhidi ya jedwali la ndani la viumbe vilivyopewa jina 200 vya kawaida. Visivyopatikana hurudi kwenye nambari. Wakati wa kusimbua, hutafuta kwa regex moja inayolingana na
&jina;,&#NNN;, na&#xHH;kwa upitio mmoja. - Panga kwenye herufi. Mechi za jina zinatatua kupitia jedwali la nyuma. Mechi za nambari zinapitia
String.fromCodePointna msingi 10 au msingi 16. Viumbe visivyojulikana vilivyopewa jina vinaacha vile vile ili ingizo la sehemu lisafirie bila hasara. - Hali ya moja kwa moja. Geuza hali ya moja kwa moja na kila kibonyezi kinaendesha tena ubadilishaji na kianzishi cha 150 ms. Inasaidia unapohariri kipande na unataka maoni ya papo hapo kabla ya kuibandika kwenye kiolezo.
Kwa nini kusimba viumbe vya HTML
- Zuia ingizo la mtumiaji lisiharibike mpangilio. Mtumiaji anapoandika
<potovu kwenye kisanduku cha maoni, kuweka maandishi hayo moja kwa moja kwenye HTML huandika upya ukurasa wote uliobaki. Kusimba herufi zilizohifadhiwa kwanza kunamaanisha kivinjari kinaonyesha herufi badala ya kuichambua kama mwanzo wa lebo. - Weka thamani za sifa kuwa halali. Kuingiza mfuatano uliononulina ndani ya sifa ya HTML kunahitaji nukuu iliyoingizwa ibadilishwe na
"(kwa sifa zenye nukuu maradufu) au'(kwa zenye nukuu moja). Vinginevyo mchambua hufunga sifa mapema na mstari uliobaki unakuwa alama za matatizo. - Onyesha HTML ya bahati mbaya kwenye data iliyohifadhiwa. Kumbukumbu, ripoti za hitilafu, na usafirishaji wa mazungumzo mara nyingi hujumuisha mabano ya kweli ya pembe na ampersand. Kusimba viumbe kwenye madumpio kabla ya kuibandika kwenye ukurasa wa hati huhifadhi nakala hiyo inayoonekana kama maandishi badala ya kuamsha kidhibiti au kikigundua cha kiungo cha kiotomatiki.
- Shiriki vipande vya msimbo kwa usalama. Kutuma lebo ya mfano kama
<script>alert(1)</script>kwenye chapisho la blogu, barua pepe, au ujumbe wa Slack kunahitaji mabano yasimbwe ili kipande kionyeshwe badala ya kutekelezwa. Mbinu hiyo hiyo inashughulikia miili ya malisho ya RSS na sehemu za `description` za JSON-LD.
Matumizi ya kawaida
Usimbuaji wa viumbe huonekana popote maandishi wazi yanajengwa kwenye HTML wakati wa uendeshaji — hata mfumo unaposhughulikia kawaida, zana ya mkono ni muhimu kwa wakati usiofanya hivyo.
- Violezo vilivyowakiliwa na seva: Jinja2, ERB, Twig, na Handlebars hutoroka kiotomatiki kwa chaguomsingi, lakini vitalu wazi na vialamisho vya `safe` huzima hiyo — codec hukuruhusu kuthibitisha kile ambacho kutoroka kungelikuwa kumezalisha.
- Uandishi wa barua pepe na habari: injini nyingi za kiolezo za ESP hazitoroki sehemu za kuunganisha kiotomatiki, kwa hivyo nukuu smart na ishara za hakimiliki kwenye majina yaliyotolewa na mtumiaji zinahitaji usimbuaji wa awali.
- Hati na mifano ya msimbo: kubandika lebo ya HTML ya mfano kwenye chapisho la Markdown ya blogu au kipande cha tovuti tuli kunahitaji mabano yasimbwe ili kidhibiti kichukulie kama maandishi yanayoonekana.
Mfano uliofanyiwa kazi
Bandika <script>alert('hi')</script> kwenye ingizo na hali iliyowekwa kwenye Simba, mtindo Jina, wigo Ndogo. Matokeo yanasomeka <script>alert('hi')</script>. Geuza mtindo kwenye Nambari hex na ingizo lilo hilo huzalisha <script>alert('hi')</script>. Geuza hali kwenye Simbua, bandika tena mfuatano uliusimbwa, na lebo asili inarudi salama.
FAQ
Viumbe vya HTML ni nini?
Viumbe vya HTML ni marejeleo ya herufi ambayo kivinjari hubadilisha tena kwenye herufi moja kinapochambua ukurasa. Vinakuja katika muundo tatu: vilivyopewa jina (kama & kwa &), desimali ya nambari (&), na hex ya nambari (&). Herufi tano zilizohifadhiwa za HTML (<, >, &, ", ') zinahitaji usimbuaji kila wakati maandishi yanawekwa kwenye HTML. Viumbe vilivyopewa jina vingine takriban 2,225 vinashughulikia alama, lafudhi, na herufi za Kigiriki lakini ni vya hiari usimbuaji wa hati ukiwa UTF-8.
Nishould wakati gani kutumia viumbe vilivyopewa jina dhidi ya nambari?
Tumia viumbe vilivyopewa jina unapotaka chanzo kisomeke wazi (binadamu anayekagua © kwenye kiolezo anaelewa mara moja). Tumia nambari (desimali au hex) mteja akiwa wa zamani au mkali zaidi — wachambua wa XML, wateja wa zamani wa barua pepe, na wasomaji wengine wa malisho wanaotambua sehemu ndogo tu ya viumbe vilivyopewa jina vya HTML5, nao wote wanatambua muundo wa nambari. Hex huwa na ushindi katika muktadha unaozingatia usalama kwa sababu inalingana moja kwa moja na ujulikano wa nambari ya msimbo ya Unicode unaotumiwa katika hati za maelezo.
Je, usimbuaji hushughulikia viumbe vya hex kama &?
Ndio. Kisimbua hutumia regex moja inayolingana na muundo wote wa tatu wa viumbe kwa upitio mmoja: &jina;, &#NNN;, na &#xHH;. Mechi za nambari hutatuliwa na String.fromCodePoint ukitumia msingi 10 au msingi 16. Ingizo lililochanganywa (vilivyopewa jina na nambari katika mfuatano mmoja) husimbuka kwa usahihi, na majina yasiyojulikana yanaachwa kama maandishi halisi ili ingizo la sehemu lisafirie bila hasara.
Je, hii ni salama kwa matumizi na ingizo lisiloaminiwa?
Codec yenyewe ni ya kivinjari tu na haitumi ingizo lako popote. Kama matokeo ni salama kuingiza inategemea muktadha. Usimbuaji wa viumbe hushughulikia miili ya HTML na muktadha wa thamani za sifa, ambayo inashughulikia kesi ya OWASP Kanuni #1. Muktadha wa JavaScript (vidhibiti vya matukio vya ndani, vitalu vya `<script>`), muktadha wa CSS, na muktadha wa URL kila mmoja anahitaji kanuni zake za usimbuaji — usimbuaji wa viumbe peke yake hautoshi huko. Kwa ulinzi wa kina wa seva, oanisha na injini ya kiolezo inayofahamu muktadha kama DOMPurify au kutoroka kiotomatiki kwa mfumo wako.
Usimbuaji wa viumbe wa kivinjari unakaa kwenye mpaka kati ya ingizo la mtumiaji na HTML iliyowakilishwa. Kufanya ubadilishaji ndani ya kompyuta kunamaanisha unaweza kuangalia afya ya kile ambacho mfumo wako ungelikuwa umetoa, bila kutuma maandishi asili kwa zana ya mhusika wa tatu.