Niz za izlazne sekvence
Gotovo svaka greška u zaštiti je greška konteksta, a ne greška sintakse. Znak je poznat — navodnik, obrnuta kosa crta, ampersand — i ono što je nejasno je koja od šest konfliktnih pravila se primjenjuje gdje je niz spremna da sleti.
Dakle, ova tablica je organizirana po kontekstu, a ne po znaku. Isti navodnik se udvostručava u CSV ćeliji, zaštićen obrnutom kosom crtom u JSON-u, pretvara se u " u HTML-u i ostavlja potpuno sam unutar pojedinačnih navodnika u ljusci. Četiri reda, četiri pravila, jedan znak.
Pravilo koje je najvažnije je ono koje ljudi dosežu zadnje: zaštiti na granici vrijednost prelazi, i zaštiti je jednom. Tekst koji je zaštićen dvaput — & u izvoru stranice, \\n u izlaznoj datoteci — je potpis vrijednosti koja je prošla kroz dva kodera koji su svaki pretpostavili da su prvi.
JSON nizovi
10JSON dozvoljava točno ti escapes. Doslovna nova linija ili tab unutar niza je nevaljana.
| Escape | Znači | Kada vam trebate | U kontekstu |
|---|---|---|---|
| \" | " | Dvostruki navodnik unutar niza | "say \"hi\"" |
| \\ | \ | Doslovna obrnuta kosa crtaRazlog zašto Windows putanja prekida JSON. | "C:\\dir" |
| \/ | / | Kosa crta unaprijed — neobaveznaZakonito ali nepotrebno; navika od ugrađivanja JSON-a u <script> oznake. | "a\/b" |
| \n | U+000A | Hranjenje linije | "line\nline" |
| \r | U+000D | Povratak kretanja | |
| \t | U+0009 | Kartica | |
| \b | U+0008 | Povratak za leđa | |
| \f | U+000C | Oblik hranjenja | |
| \u00e9 | é | Bilo koji znakovi po njegovoj četirovedbrojnoj kodnoj točki | "caf\u00e9" |
| \ud83d\ude00 | 😀 | Znakovi iznad U+FFFF, kao par zamjenikaJSON nema \u{…} oblika, pa astralni znakovi trebaju dva escapes. |
JavaScript nizovi
10Nadskup JSON-a, plus template-literal escapes.
| Escape | Znači | Kada vam trebate | U kontekstu |
|---|---|---|---|
| \' | ' | Pojedinačni navodnik unutar niza u pojedinim navodnicima | |
| \" | " | Dvostruki navodnik unutar niza u dva navodnika | |
| \` | ` | Obrnuta kosa crta unutar template literala | |
| \${ | ${ | Doslovna ${ unutar template literalaBez obrnute kose crte počinje interpolacija. | |
| \n | U+000A | Hranjenje linije | |
| \xe9 | é | Znakovi po dva heksadecimalna znamenka, do U+00FF | |
| \u00e9 | é | Znakovi po četiri heksadecimalne znamenke | |
| \u{1f600} | 😀 | Bilo koja kodna točka, koliko god dugoNije potreban par zamjenika, za razliku od oblika s četiri znamenke. | |
| \0 | U+0000 | Nulti znakovi | |
| \u2028 | U+2028 | Razdelnika linijaValjano u JS nizu ali ne u JSON-u — klasična JSONP prekida. |
HTML tekst i atributi
8Samo & i < strogo se trebaju zaštititi u tekstu; navodnike je važno unutar atributa.
| Escape | Znači | Kada vam trebate | U kontekstu |
|---|---|---|---|
| & | & | AmpersandZaštiti ovo prvo, ili će se svaki drugi escape udvostručiti. | |
| < | < | Manji od znaka, pa on ne počinje oznaku | |
| > | > | Veći od znaka | |
| " | " | Dvostruki navodnik unutar atributa | |
| ' | ' | Pojedinačni navodnik unutar atributa' također radi u HTML5-u, ali numerički oblik je sigurniji svugdje. | |
| | U+00A0 | Razmak bez prekida | |
| é | é | Bilo koji znakovi po njegovoj decimalnoj kodnoj točki | |
| é | é | Bilo koji znakovi po njegovoj heksadecimalnoj kodnoj točki |
URL-ovi (kodiranje postotaka)
9Koji znakovi trebaju zaštiti ovisi o dijelu URL-a gdje sjede.
| Escape | Znači | Kada vam trebate | U kontekstu |
|---|---|---|---|
| %20 | Razmak, valjano bilo gdje u URL-u | ||
| + | Razmak, ali samo u nizu kodiranom obrascem upitaU segmentu puta je to doslovno plus znak. | ||
| %25 | % | Doslovna znamenka postotakaPropustite to i vrijednost se dekodira dva puta. | |
| %2F | / | Kosa crta unutar jednog segmenta puta | |
| %3F | ? | Znak upitnika unutar vrijednosti | |
| %26 | & | Ampersand unutar vrijednosti parametra | |
| %3D | = | Znak jednakosti unutar vrijednosti parametra | |
| %23 | # | Heš, pa on ne počinje fragment | |
| %C3%A9 | é | Znakovi ne-ASCII, kao njegove UTF-8 bajtoveJedan znakovi može postati dvije, tri ili četiri grupe postotaka. |
CSV polja
5RFC 4180: citirajte polje, zatim udvostručite bilo koji navodnik unutar njega. Obrnute kose crte znače ništa.
| Escape | Znači | Kada vam trebate | U kontekstu |
|---|---|---|---|
| "" | " | Navodnik unutar navedenog polja — udvostručite ga | "say ""hi""" |
| "a,b" | , | Polje koje sadrži ograničnik — citirajte polje | |
| "a b" | U+000A | Polje koje sadrži prijelom reda — citirajte polje | |
| " a" | Čuvaj vodeće ili zaostale razmakeNekotirani, mnogi parseri ih podreže. | ||
| '=SUM(A1) | = | Zaustavite proračunsku tablicu izvršavanja ćelije kao formulePrimjenjuje se na vrijednosti koje započinju =, +, - ili @. Ovo je injekcija formule. |
SQL doslici i identifikatori
6Pročitajte te; ne pišite ih. Koristite parametrizirane upite umjesto.
| Escape | Znači | Kada vam trebate | U kontekstu |
|---|---|---|---|
| '' | ' | Navodnik unutar niza doslici — udvostručite ga | 'O''Brien' |
| "order" | order | Rezervirana riječ koja se koristi kao naziv stupcaDvostruki navodnnici su standard; SQL Server koristi [zagrade]. | |
| `order` | order | Ista u MySQL-u i MariaDB-u | |
| \% | % | Doslovna % unutar LIKE obrasca | |
| \_ | _ | Doslovna _ unutar LIKE obrasca | |
| $tag$ … $tag$ | ' | PostgreSQL dolar navođenja — bez zaštite unutar sveKorisno za tijela koda, gdje udvostručavanje svakog navodnika nije čitljivo. |
Argumenti ljuske
6Pojedinačni navodnnici su doslovno, dvostruki navodnnici se još uvijek proširuju varijabli.
| Escape | Znači | Kada vam trebate | U kontekstu |
|---|---|---|---|
| '…' | $ ` \ | Sve unutar je doslovnoNajsigurnije navođenja — ali ne može sadržavati pojedinačni navodnik. | |
| "…" | * ? space | Globs i razmaci su sigurni, varijabli se još uvijek proširujuAlways quote variables: "$var", never bare $var. | |
| \ | Razmak u datoteki bez navodnika | ||
| \$ | $ | Doslovna znamenka dolara unutar dvostruku navodnika | |
| \` | ` | Doslovna obrnuta kosa crta, ne zamjena naredbe | |
| '\'' | ' | Pojedinačni navodnik unutar niza u pojedinim navodnicimaZatvori, zaštiti, ponovno otvori — nema načina da ga ugniježdiš izravno. |