Utilia

Szöveg escape-elése és visszafejtése

Escape-eld vagy fejtsd vissza a szöveget JSON, JavaScript, sablonliterál, SQL, CSV, HTML-attribútum, reguláris kifejezés és URL formátumhoz, a böngésződben.

Hogyan escape-elj vagy fejts vissza egy szöveget

  1. A Formátum mezőben válaszd ki a célt: JSON-sztring, JavaScript-sztring, JavaScript sablonliterál, SQL-sztringliterál, CSV-mező, HTML-attribútum értéke, reguláris kifejezés vagy URL-összetevő.
  2. Írd be vagy illeszd be a szöveget a bemeneti mezőbe.
  3. Kattints az Escape-elés gombra, hogy a sima szövegből biztonságos literál legyen, vagy a Visszafejtés gombra, hogy a literálból újra sima szöveg legyen. Az eredmény gépelés közben frissül, az utoljára választott irányban.
  4. Állítsd be a formátumhoz megjelenő beállításokat: Körülvevő idézőjelek hozzáadása, Nem ASCII karakterek escape-elése vagy Szóközök + jelként (űrlapadatok).
  5. Kattints a Másolás gombra, vagy a Kimenet használata bemenetként gombra, hogy megfordítsd a műveletet, és ellenőrizd az oda-vissza átalakítást.

A gombok alatt látható a karakterek száma előtte és utána. Minden a böngésződben fut; semmi nem kerül feltöltésre.

Mit csinálnak az egyes formátumok

  • JSON-sztring: escape-eli a ", a \ és a vezérlőkaraktereket (\n, \t, \u0000…), pontosan úgy, mint a JSON.stringify. A Nem ASCII karakterek escape-elése esetén minden U+007E fölötti karakter \uXXXX alakú lesz (az emojik surrogate-párrá, például 😀). A visszafejtés elfogadja a szöveget a dupla idézőjelekkel és azok nélkül is, és tűri a nyers sortöréseket.
  • JavaScript-sztring (‘…’): escape-eli a fordított perjelet, az aposztrófot, a sortöréseket és a vezérlőkaraktereket, valamint az U+2028 és U+2029 karaktert, amelyek a régebbi motoroknál hibát okoznak. A visszafejtés érti a \x41, A, \u{1F600} alakot, a régi, nyolcas számrendszerű escape-eket, például a \101-et, és a sorfolytatásokat.
  • JavaScript sablonliterál (`…`): escape-eli a visszaaposztrófokat, a fordított perjeleket és a ${ jelet, hogy ne értékelődjön ki kifejezés; a sortörések és a tabulátorok változatlanok maradnak, mert a sablonliterálok megengedik őket.
  • SQL-sztringliterál (‘…’): megkettőzi az aposztrófokat (O'Brien → 'O''Brien'), ahogy a szabványos SQL-ben szokás. A visszafejtés megtagad egy nem megkettőzött aposztrófot. A fordított perjeleket békén hagyja: a MySQL alapértelmezett módjában a \ is escape-karakter, ezért ellenőrizd az adatbázisod szabályait.
  • CSV-mező (RFC 4180): dupla idézőjelbe teszi a mezőt, és megkettőzi a belső idézőjeleket, ha vesszőt, pontosvesszőt, tabulátort, idézőjelet, sortörést vagy kezdő/záró szóközt tartalmaz. A Körülvevő idézőjelek hozzáadása kikényszeríti az idézőjeleket.
  • HTML-attribútum értéke: a &, <, >, " és ' karaktereket entitásokra cseréli, ami az egyszeres és a dupla idézőjeles attribútumokban is biztonságos. A visszafejtés dekódolja a numerikus hivatkozásokat és az &amp;, &lt;, &gt;, &quot;, &apos; és &nbsp; entitásokat.
  • Reguláris kifejezés (szó szerinti szöveg): fordított perjellel escape-eli a . * + ? ^ $ { } ( ) | [ ] \ / karaktereket, valamint a sortöréseket és a tabulátorokat, hogy a minta szó szerint illeszkedjen a szövegre. Az eredmény a u flaggel és anélkül is érvényes.
  • URL-összetevő (százalékkódolás): úgy működik, mint az encodeURIComponent: a betűk, számjegyek és a - _ . ! ~ * ' ( ) karakterek kivételével mindent UTF-8 bájtokként kódol. A Szóközök + jelként (űrlapadatok) az application/x-www-form-urlencoded konvenciót használja.

Az escape-elés SQL-nél nem biztonsági határ

Ha az SQL-t választod, az eszköz emlékeztetőt mutat, és ez megérdemli az ismétlést: az SQL-injekció valódi megoldása a paraméterezett lekérdezés (prepared statement), ahol az értéket az SQL-szövegtől külön küldik el. A kézi escape-elés törékeny: az adatbázistól, a kapcsolat karakterkészletétől és olyan beállításoktól függ, mint a MySQL fordított perjel kezelése. Ezt a kimenetet naplók olvasásához, tesztadatok íráshoz vagy lekérdezés hibakereséséhez használd, soha ne felhasználói bemenetből építsd vele a lekérdezéseket.

A CSV-nél az eszköz azt is jelzi, ha egy érték =, +, - vagy @ jellel kezdődik: a táblázatkezelő képletként futtathatja (CSV-injekció). Az idézőjelezés ezt nem akadályozza meg; az érték elé tett aposztróf vagy szóköz a szokásos védekezés.

Gyakori kérdések

Mi a különbség a JSON-sztring és a JavaScript-sztring között?

A JSON csak dupla idézőjelet és az escape-ek egy kis készletét engedi meg (\" \\ \/ \b \f \n \r \t \uXXXX). A JavaScript az aposztrófot, a visszaaposztrófot, a \x41, \u{…}, \v és \0 alakot is elfogadja. Az érvényes JSON-escape-ek érvényesek JavaScriptben is, de fordítva nem.

Miért sikertelen a visszafejtés „érvénytelen escape-szekvencia” hibával?

A szöveg olyan fordított perjelet tartalmaz, amelyet a formátum nem engedélyez, például a négynél kevesebb hexadecimális számjegyű \u12 alakot, vagy egy záró magányos fordított perjelet. A hibaüzenet megmutatja a hibás szekvenciát.

Kell idézőjel a CSV minden mezője köré?

Nem. Az RFC 4180 csak akkor ír elő idézőjelet, ha a mező vesszőt, dupla idézőjelet vagy sortörést tartalmaz. Ez az eszköz a pontosvesszőt, a tabulátort és a kezdő vagy záró szóközt is idézőjelbe teszi, mert sok táblázatkezelő határolóként használja, vagy levágja őket.

Elég a HTML-attribútum escape-elése az XSS megelőzésére?

Az idézőjelezett attribútumértékbe kerülő szövegre helyes. Nem elég azokra az attribútumokra, amelyek maguk kódot vagy URL-t tartalmaznak, például az onclick vagy a href="javascript:…"; ezeknél ellenőrzés kell, nem csak escape-elés.

Elküldésre kerül a szövegem egy szerverre?

Nem. Minden átalakítás helyben, a böngésződben fut, így nyugodtan beilleszthetsz konfigurációs értékeket vagy olyan adatokat, amelyeket nem osztanál meg.