Utilia

Ubeganje in razveljavitev ubeganja nizov

Ubeži ali razveljavi ubeganje niza za JSON, JavaScript, predloge, SQL, CSV, atribute HTML, regularne izraze in URL, kar v brskalniku.

Kako ubežati ali razveljaviti ubeganje niza

  1. V Oblika izberi cilj: niz JSON, niz JavaScript, predloga JavaScript, niz SQL, polje CSV, vrednost atributa HTML, regularni izraz ali sestavni del URL.
  2. Besedilo vpiši ali prilepi v vnosno polje.
  3. Klikni Ubeži, da navadno besedilo spremeniš v varen literal, ali Razveljavi ubeganje, da literal spremeniš nazaj v navadno besedilo. Rezultat se posodablja med tipkanjem, v smeri, ki si jo izbral nazadnje.
  4. Prilagodi možnosti, prikazane za obliko: Dodaj obdajajoče narekovaje, Ubeži znake, ki niso ASCII ali Presledki kot + (podatki obrazca).
  5. Klikni Kopiraj ali Uporabi izhod kot vhod, da operacijo obrneš in preveriš obhod.

Število znakov pred in po je prikazano pod gumbi. Vse teče v tvojem brskalniku; nič se ne naloži na strežnik.

Kaj počne posamezna oblika

  • Niz JSON: ubeži ", \ in kontrolne znake (\n, \t, \u0000 …), natanko kot JSON.stringify. Z Ubeži znake, ki niso ASCII vsak znak nad U+007E postane \uXXXX (emoji postanejo par nadomestnih znakov, na primer 😀). Razveljavitev ubeganja sprejme besedilo z dvojnimi narekovaji ali brez njih in prenese gole prelome vrstic.
  • Niz JavaScript (‘…’): ubeži poševnico nazaj, enojni narekovaj, prelome vrstic in kontrolne znake ter U+2028 in U+2029, ki starejše pogone zmedeta. Razveljavitev ubeganja razume \x41, A, \u{1F600}, starejša osmiška ubeganja, kot je \101, in nadaljevanja vrstic.
  • Predloga JavaScript (`…`): ubeži poševne opuščaje, poševnice nazaj in ${, tako da se noben izraz ne ovrednoti; prelomi vrstic in tabulatorji ostanejo, kot so, saj jih predloge dovoljujejo.
  • Niz SQL (‘…’): podvoji enojne narekovaje (O'Brien → 'O''Brien'), kot v standardnem SQL. Razveljavitev ubeganja zavrne narekovaj, ki ni podvojen. Poševnice nazaj ostanejo nedotaknjene: MySQL v privzetem načinu \ prav tako obravnava kot ubežni znak, zato preveri pravila svoje zbirke podatkov.
  • Polje CSV (RFC 4180): polje obda z dvojnimi narekovaji in podvoji notranje narekovaje, kadar vsebuje vejico, podpičje, tabulator, narekovaj, prelom vrstice ali presledek na začetku/koncu. Dodaj obdajajoče narekovaje narekovaje vsili.
  • Vrednost atributa HTML: &, <, >, " in ' zamenja z entitetami, kar je varno v atributih z enojnimi in dvojnimi narekovaji. Razveljavitev ubeganja dekodira številske reference ter &amp;, &lt;, &gt;, &quot;, &apos; in &nbsp;.
  • Regularni izraz (dobesedno besedilo): z poševnico nazaj ubeži . * + ? ^ $ { } ( ) | [ ] \ / ter prelome vrstic in tabulatorje, tako da se vzorec z besedilom ujema dobesedno. Rezultat je veljaven z zastavico u ali brez nje.
  • Sestavni del URL (odstotno kodiranje): deluje kot encodeURIComponent in kodira vse razen črk, števk in - _ . ! ~ * ' ( ) kot bajte UTF-8. Presledki kot + (podatki obrazca) uporablja dogovor application/x-www-form-urlencoded.

Ubeganje ni varnostna meja za SQL

Ko izbereš SQL, orodje pokaže opomnik, ki ga je vredno ponoviti: prava rešitev proti vbrizgavanju SQL je parametrizirana poizvedba (pripravljen stavek), kjer se vrednost pošlje ločeno od besedila SQL. Ročno ubeganje je krhko: odvisno je od zbirke podatkov, nabora znakov povezave in nastavitev, kot je obravnava poševnice nazaj v MySQL. Ta izhod uporabi za branje dnevnikov, pisanje testnih podatkov ali razhroščevanje poizvedbe, nikoli za gradnjo poizvedb iz uporabniških vnosov.

Pri CSV orodje opozori tudi, kadar se vrednost začne z =, +, - ali @: preglednica jo lahko izvede kot formulo (vbrizgavanje v CSV). Narekovaji tega ne preprečijo; običajen ukrep je predpona z opuščajem ali presledkom.

Pogosta vprašanja

Kakšna je razlika med nizom JSON in nizom JavaScript?

JSON dovoljuje samo dvojne narekovaje in majhen nabor ubežnih zaporedij (\" \\ \/ \b \f \n \r \t \uXXXX). JavaScript sprejema tudi enojne narekovaje, poševne opuščaje, \x41, \u{…}, \v in \0. Veljavna ubežna zaporedja JSON so veljavna v JavaScriptu, obratno pa ne.

Zakaj razveljavitev ubeganja ne uspe z »neveljavno ubežno zaporedje«?

Besedilo vsebuje poševnico nazaj, ki ji sledi nekaj, česar oblika ne dovoljuje, na primer \u12 z manj kot štirimi šestnajstiškimi števkami ali zaključna osamljena poševnica nazaj. Sporočilo o napaki pokaže napačno zaporedje.

Ali CSV potrebuje narekovaje okoli vsakega polja?

Ne. RFC 4180 zahteva narekovaje samo, kadar polje vsebuje vejico, dvojni narekovaj ali prelom vrstice. To orodje v narekovaje da tudi podpičja, tabulatorje ter presledke na začetku ali koncu, ker jih mnoge preglednice uporabljajo kot ločila ali jih obrežejo.

Ali ubeganje atributa HTML zadošča za preprečevanje XSS?

Pravilno je za besedilo znotraj vrednosti atributa v narekovajih. Ne zadošča za atribute, ki so sami koda ali URL, kot sta onclick ali href="javascript:…"; ti zahtevajo preverjanje, ne samo ubeganja.

Ali se moje besedilo pošilja na strežnik?

Ne. Vse pretvorbe tečejo lokalno v tvojem brskalniku, zato lahko varno prilepiš konfiguracijske vrednosti ali podatke, ki jih ne bi delil.