Text a kód / Návody

Kódovanie HTML, URL a JavaScriptu: postupujte podľa jednotlivých vrstiev

Hodnota môže prejsť cez adresu URL, dokument HTML a zdroj JavaScript. Každý cieľ interpretuje rôzne znaky ako syntax.

Pomenujte bezprostredný cieľ

Predpokladajme, že hodnota vyhľadávania je A&B "C". V komponente URL dotazu by ampersand normálne oddeľoval parametre, takže musí byť zakódovaný ako súčasť hodnoty pred zostavením reťazca dopytu. V texte HTML môže ampersand predstavovať odkaz na znak a ostrá zátvorka môže predstavovať označenie. Vo vnútri reťazcového literálu JavaScriptu majú úvodzovky a spätné lomky svoju vlastnú syntax. Toto sú tri odlišné kontexty analýzy. Výstup bezpečný pre jedného nie je automaticky bezpečný pre ďalšieho. Produkčná aplikácia by mala používať kontextové platformy API a šablóny, a nie zostavovať značky zreťazením.

Spracujte prvú hranicu

Ak je kľúč dotazu q, zakódujte hodnotu ako jeden komponent adresy URL a potom ju umiestnite za q=. Ampersand sa zmení na %26 a úvodzovky sú reprezentované podľa pravidiel kódovača URL. Kódovanie celej dokončenej adresy URL, ako keby to bola hodnota, by zakódovalo aj jej štrukturálnu interpunkciu a vytvorilo by nesprávnu adresu. Ak sa výsledná adresa URL zobrazí ako text odkazu na stránke HTML, textový uzol potom potrebuje reprezentáciu bezpečnú pre HTML. Ak je umiestnený v atribúte HTML, použite serializátor bezpečný pre atribúty, ktorý má svoje vlastné pravidlá citovania.

Každý parser spracúva vlastnú syntax.
  1. Pôvodná hodnota: A&B „C“
  2. Komponent URL: zakódovať vyhradené znaky
  3. HTML alebo JavaScript: escapovať pre daný cieľ

Nerobte z JavaScriptu transportný formát

Skript môže potrebovať uložiť pôvodnú hodnotu v citovanom literáli, ktorý vyžaduje escapovanie reťazca JavaScript. Ide o problém so zdrojovým kódom, nie o náhradu za kódovanie komponentu URL alebo kódovanie výstupu HTML. Neumiestňujte nedôveryhodný vstup priamo do zdroja inline skriptu; používanie dátových atribútov alebo elementu skriptu so starostlivo serializovaným JSON môže byť bezpečnejšie, keď je implementované udržiavanými rámcami. Nástroj escape JavaScript MultiVerto ilustruje znaky typu reťazcový liter, ale nemôže potvrdiť, že celá aplikácia je bezpečná pred vložením skriptu. Bezpečnosť závisí od aktuálneho kontextu analyzátora a okolitého kódu.

Dekódujte v opačnom poradí

Na prijímacom konci analyzátor URL extrahuje q a percent-dekóduje komponent raz. Analyzátor HTML spracováva entity počas vytvárania svojho dokumentu; prehliadač nedekóduje percentá obyčajný text len ​​preto, že sa zobrazuje na stránke. JavaScript interpretuje svoje vlastné doslovné úniky, keď analyzuje zdrojový kód. Použitie nesprávneho dekodéra môže zanechať viditeľné sekvencie, ako napríklad %26, alebo vytvoriť údaje, ktoré sa potom interpretujú ako syntax v inom kontexte. Uchovajte pôvodnú nespracovanú hodnotu oddelenú od každej serializovanej reprezentácie, aby sa displej orientovaný na používateľa náhodne nestal ďalším vstupom spracovania.

Kontrolný zoznam na kontrolu skutočnej aplikácie

Nakreslite cestu od zdrojovej hodnoty ku komponentu URL, potom k HTML textu alebo atribútu a až potom k akémukoľvek použitiu skriptu. Pri každej šípke vyberte rozhranie API pre tento presný cieľ a otestujte znaky, ako sú ampersand, úvodzovka, znamienko menšie ako ASCII. Skontrolujte konečnú vykreslenú stránku a výslednú analyzovanú adresu URL, nielen prechodný zakódovaný reťazec. Escape neudeľuje dôveru ani neoveruje cieľ odkazu; môžu sa stále vyžadovať samostatné kontroly pravidiel. Prepojené konvertory pomáhajú demonštrovať každú vrstvu pomocou malej vzorky predtým, ako ju implementujete do rámca.

Pri ladení si pre každý krok zapíšte surovú hodnotu a to, ktorý parser ju spracuje ako ďalší. Potom skontrolujte výsledok v nástrojoch pre vývojárov: hodnotu parametra URL, textový uzol stránky a prípadný JavaScriptový reťazec. Ak už niektorý krok vráti dekódovanú hodnotu, neaplikujte na ňu automaticky ďalší dekodér. Táto disciplína je dôležitá najmä pri prenášaní odkazu medzi šablónou a skriptom.

Vyskúšať konvertor

Vyskúšajte kódovanie entity HTML a potom porovnajte nástroje URL a JavaScript.

Preveďte &, <, > a úvodzovky na HTML entity, keď potrebujete bezpečne zobraziť text v HTML.

Otvoriť celý konvertor

Ďalšie návody

Návody na konverzie

Prezrieť návody