Utilia

Escape i unescape stringa

Escape ili unescape stringa za JSON, JavaScript, šablonske literale, SQL, CSV, HTML atribute, regularne izraze i URL adrese, direktno u pregledaču.

Kako se radi escape ili unescape stringa

  1. Izaberi cilj u polju Format: JSON string, JavaScript string, JavaScript šablonski literal, SQL string literal, CSV polje, vrednost HTML atributa, regularni izraz ili komponentu URL-a.
  2. Upiši ili nalepi tekst u polje za unos.
  3. Klikni Escape da obični tekst pretvoriš u bezbedan literal, ili Unescape da literal vratiš u običan tekst. Rezultat se ažurira dok kucaš, u smeru koji si poslednji izabrao.
  4. Podesi opcije prikazane za format: Dodaj okolne navodnike, Escape za znakove van ASCII ili Razmaci kao + (podaci obrasca).
  5. Klikni Kopiraj, ili Koristi rezultat kao unos da obrneš postupak i proveriš da li se dobija isti tekst.

Broj znakova pre i posle prikazan je ispod dugmadi. Sve radi u tvom pregledaču; ništa se ne otprema.

Šta radi svaki format

  • JSON string: izbegava ", \ i kontrolne znakove (\n, \t, \u0000…), tačno kao JSON.stringify. Sa Escape za znakove van ASCII svaki znak iznad U+007E postaje \uXXXX (emodži postaju surogat par kao 😀). Unescape prihvata tekst sa dvostrukim navodnicima ili bez njih i toleriše sirove prelome redova.
  • JavaScript string (‘…’): izbegava kosu crtu unazad, apostrof, prelome redova i kontrolne znakove, plus U+2028 i U+2029, koji kvare starije mehanizme. Unescape razume \x41, A, \u{1F600}, stare oktalne sekvence kao \101 i nastavke reda.
  • JavaScript šablonski literal (`…`): izbegava obrnute apostrofe, kose crte unazad i ${ da se nijedan izraz ne izračuna; prelomi redova i tabulatori ostaju kakvi jesu, jer ih šablonski literali dozvoljavaju.
  • SQL string literal (‘…’): udvostručuje apostrofe (O'Brien → 'O''Brien'), kao u standardnom SQL-u. Unescape odbija apostrof koji nije udvostručen. Kose crte unazad se ne diraju: MySQL u podrazumevanom režimu i \ tretira kao escape znak, pa proveri pravila svoje baze.
  • CSV polje (RFC 4180): stavlja polje pod dvostruke navodnike i udvostručuje unutrašnje navodnike kada sadrži zarez, tačku-zarez, tabulator, navodnik, prelom reda ili razmak na početku/kraju. Dodaj okolne navodnike nameće navodnike.
  • Vrednost HTML atributa: zamenjuje &, <, >, " i ' entitetima, što je bezbedno u atributima pod jednostrukim i dvostrukim navodnicima. Unescape dekodira numeričke reference i &amp;, &lt;, &gt;, &quot;, &apos; i &nbsp;.
  • Regularni izraz (doslovni tekst): ispred . * + ? ^ $ { } ( ) | [ ] \ / stavlja kosu crtu unazad, a isto radi sa prelomima redova i tabulatorima, pa obrazac poklapa tekst doslovno. Rezultat je ispravan sa zastavicom u i bez nje.
  • Komponenta URL-a (procentno kodiranje): radi kao encodeURIComponent, kodira sve osim slova, cifara i - _ . ! ~ * ' ( ) kao UTF-8 bajtove. Razmaci kao + (podaci obrasca) koristi konvenciju application/x-www-form-urlencoded.

Escape nije bezbednosna granica za SQL

Kada izabereš SQL, alat prikazuje podsetnik, i vredi ga ponoviti: pravo rešenje protiv SQL injekcije je parametrizovan upit (prepared statement), u kojem se vrednost šalje odvojeno od SQL teksta. Ručni escape je krhak: zavisi od baze, skupa znakova veze i podešavanja kao što je obrada kose crte unazad u MySQL-u. Koristi ovaj rezultat za čitanje logova, pisanje test podataka ili otklanjanje grešaka u upitu, nikada za pravljenje upita od korisničkog unosa.

Za CSV alat takođe upozorava kada vrednost počinje znakom =, +, - ili @: tabela je može izvršiti kao formulu (CSV injekcija). Navodnici to ne sprečavaju; uobičajena zaštita je da se ispred vrednosti stavi apostrof ili razmak.

Česta pitanja

Koja je razlika između JSON stringa i JavaScript stringa?

JSON dozvoljava samo dvostruke navodnike i mali skup escape sekvenci (\" \\ \/ \b \f \n \r \t \uXXXX). JavaScript prihvata i jednostruke navodnike, obrnute apostrofe, \x41, \u{…}, \v i \0. Ispravne JSON sekvence su ispravne i u JavaScript-u, ali ne i obrnuto.

Zašto unescape ne uspeva sa „Neispravna escape sekvenca“?

Tekst sadrži kosu crtu unazad iza koje stoji nešto što format ne dozvoljava, kao \u12 sa manje od četiri heksadecimalne cifre, ili usamljenu kosu crtu na kraju. Poruka o grešci prikazuje neispravnu sekvencu.

Da li CSV traži navodnike oko svakog polja?

Ne. RFC 4180 traži navodnike samo kada polje sadrži zarez, dvostruki navodnik ili prelom reda. Ovaj alat pod navodnike stavlja i tačke-zarez, tabulatore i razmake na početku ili kraju, jer ih mnoge tabele koriste kao razdvajače ili ih odsecaju.

Da li je escape za HTML atribut dovoljan da spreči XSS?

Ispravan je za tekst unutar vrednosti atributa pod navodnicima. Nije dovoljan za atribute koji su sami kod ili URL adrese, kao onclick ili href="javascript:…"; njima treba validacija, a ne samo escape.

Da li se moj tekst šalje na server?

Ne. Sve konverzije se izvršavaju lokalno u tvom pregledaču, pa bezbedno možeš da nalepiš vrednosti iz konfiguracije ili podatke koje ne bi delio.