Ugrás a tartalomhoz

Escape-sorozatok

Szinte minden escape-elési hiba kontextushiba, nem szintaxishiba. A karakter ismert — egy idézőjel, egy fordított perjel, egy ampersand — és az, ami nem világos, az az, hogy melyik hat ütköző szabály közül melyik vonatkozik arra a helyre, ahol a húr végzi.

Így ez a táblázat kontextus szerint van rendezve, nem karakter szerint. Ugyanaz az idézőjel egy CSV cellában megduplázódik, visszavonással escape-elve van a JSON-ban, " szövegre változik a HTML-ben, és teljesen egyedül hagyva van egy shell-ben az egy idézőjelek között. Négy sor, négy szabály, egy karakter.

A leghosszabb szabály, amely a legutóbbra történő ellátásban van, az a határon való escape-elés az érték átlépésével, és egyszer escape-eljen. A szöveg, amely kétszer van escape-elve — egy & az oldal forrásában, egy \\n a kimeneti fájlban — az aláírása annak az értéknek, amely kétszer az encoder-en átment, amely mindegyik azt feltételezte, hogy elsők.

JSON karakterláncok

10

A JSON pontosan ezt a meneküléseket engedélyezi. Egy szó szerinti új sor vagy lap egy karakterláncon belül érvénytelen.

Escape-elésEszközökMikor szükséged van ráKontextusban
\""Egy dupla idézőjel egy karakterláncon belül"say \"hi\""
\\\Egy szó szerinti fordított perjelAz oka Windows útvonalak szakadásnak a JSON-ban."C:\\dir"
\//Egy előre perjel — opcionálisJogi, de szükségtelen; a szokás az JSON beágyazottsá a <script> címkékbe."a\/b"
\nU+000AEgy szállítási feed"line\nline"
\rU+000DEgy kocsi visszatérés
\tU+0009Egy lap
\bU+0008Egy hátlap
\fU+000CEgy forma feed
\u00e9éBármely karakter négy számjegyből kódpont"caf\u00e9"
\ud83d\ude00😀Az U+FFFF fölötti karakter, helyettesítési párkéntA JSON nincs \u{…} forma, így az asztral karaktereknek két menekülésük van.

JavaScript karakterláncok

10

A JSON-t felépítő, plusz a template-literal menekülések.

Escape-elésEszközökMikor szükséged van ráKontextusban
\''Egy egy idézőjel egy egy idézőjelen belül
\""Egy dupla idézőjel egy dupla idézőjelen belül
\``Egy backtick egy template literálon belül
\${${Egy szó szerinti ${ egy template literálon belülAz vissza perjel nélkül ez egy interpoláció kezdet.
\nU+000AEgy szállítási feed
\xe9éEgy karakter által két hex számjegyből, legfeljebb U+00FF-ig
\u00e9éEgy karakter által négy hex számjegyből
\u{1f600}😀Bármely kódpont, azonban hosszúNem szükséges helyettesítési pár, ellentétben az négy számjegyből.
\0U+0000Egy null karakter
\u2028U+2028Sor szeparátorÉrvényes egy JS karakterláncon belül, de nem a JSON-ban — a klasszikus JSONP töredezés.

HTML szöveg és attribútumok

8

Csak az & és < szigorúan kell escape-elni szövegben; az idézőjelek számítanak az attribótumokon belül.

Escape-elésEszközökMikor szükséged van ráKontextusban
&amp;&Egy ampersandEscape-elje ezt az első, vagy minden egyéb escape-elést dupláz.
&lt;<Egy kevesebb jel, így ez nem kezd egy címkét
&gt;>Egy nagyobb jel
&quot;"Egy dupla idézőjel egy attribótumon belül
&#39;'Egy egy idézőjel egy attribótumon belülAz &apos; az HTML5-ben is működik, de a numerikus forma mindenütt biztonságos.
&nbsp;U+00A0Egy nem szünetet space
&#233;éBármely karakter decimális kódpontból
&#xE9;éBármely karakter hex kódpontból

URL-ek (százalékos kódolás)

9

Mely karaktereknek van szüksége escape-elésre, attól függ, hogy az URL melyik részében ülnek.

Escape-elésEszközökMikor szükséged van ráKontextusban
%20 Egy szóköz, érvényes az URL bármely helyén
+ Egy szóköz, de csak egy formakódolt lekérdezési karakterláncon belülEgy útvonalszakaszban ez egy szó szerinti plusz jel.
%25%Egy szó szerinti százalékos jelHagyja ki ezt és az érték kétszer dekódol.
%2F/Egy perjel egy egy útvonalszakaszban
%3F?Egy kérdőjel egy érték belsejében
%26&Egy ampersand egy paraméter értéke belsejében
%3D=Egy egyenlő jel egy paraméter értéke belsejében
%23#Egy kivonat, így ez nem kezd a töredéket
%C3%A9éEgy nem-ASCII karakter, mivel annak UTF-8 bájtjaiEgy karakter lehet két, három vagy négy százalékos csoport.

CSV mezők

5

RFC 4180: helyezze az idézőjelet a mezőbe, majd duplálja a belső: "say \"hi\"". A fordított perjel a megfelelő CSV elemzőhöz nem jelent semmit.

Escape-elésEszközökMikor szükséged van ráKontextusban
"""Az idézett mező belsejében egy dupla idézőjel"say ""hi"""
"a,b",Egy mező az elválasztót tartalmazó — helyezze az idézőjelet a mezőbe
"a b"U+000AEgy mező egy sortörést tartalmazó — helyezze az idézőjelet a mezőbe
" a" Vezető vagy záró szóközök megőrzéseBe nem jelölt, sok elemző trim.az
'=SUM(A1)=Állítsa meg a táblázatkezelőt a cella képletként való végrehajtásábanAz =, +, -, vagy @ karakterrel kezdődő értékekre vonatkozik. Ez a képletinjekció.

SQL szó szerinti és azonosítók

6

Olvassa meg ezeket; ne írja. Használjon parametrizált lekérdezéseket helyette.

Escape-elésEszközökMikor szükséged van ráKontextusban
'''Egy egy idézőjel egy egy karakterláncban — dupláz'O''Brien'
"order"orderEgy fenntartott szó oszlopnévként használvaAz dupla idézőjelek a szabvány; az SQL Server [zárójeleket] használ.
`order`orderUgyanez a MySQL és MariaDB-ben
\%%Egy szó szerinti % egy LIKE mintában
\__Egy szó szerinti _ egy LIKE mintában
$tag$ … $tag$'PostgreSQL dollár idézés — nincs escape-elés egyáltalán belülHasznosak a kódtest számára, ahol minden idézőjel megkétszerezés olvashatatlan.

Shell argumentumok

6

Az egy idézőjelek szó szerintiek, az dupla idézőjelek még kiterjesztik a változókat.

Escape-elésEszközökMikor szükséged van ráKontextusban
'…'$ ` \Minden belül szó szerintiAz legbiztonságosabb idézés van — de nem tartalmazhat egy egy idézőjelet.
"…"* ? spaceAz globok és szóközök biztonságosak, a változók még kiterjesztikAlways quote variables: "$var", never bare $var.
\ Egy szóköz egy nem idézett fájlnévben
\$$Egy szó szerinti dollár jel egy dupla idézőjelen belül
\``Egy szó szerinti backtick, nem egy parancs helyettesítés
'\'''Egy egy idézőjel egy egy idézőjelen belülLezárni, escape-elni, újranyitni — nem lehet közvetlenül beágyazni.

Gyakori kérdések

Miért szakad meg a JSON-om egy Windows fájlúton?
Mivel egy fordított perjel escape-sorozatot indít egy JSON karakterláncon, így a C:\dir elolvasódik mint C, majd egy érvénytelen escape. Helyesen írva az érték "C:\\dir" — két fordított perjel a fájlban, egy az értelmezett karakterláncon. Az előre irányuló perjel Windows alatt is működik, és kerüli a problémát.
A %20 vagy + helyesebb-e az URL-ben szereplő szóköznek?
Mindkettő, különböző helyeken. A %20 helyesen az URL bármely helyén. A plusz jel csak egy URL-ben alkalmazott lekérdezési karakterlánc belsejében jelöl szóközt — egy útvonalszakaszban egy szó szerinti plusz. Használjon %20-at, ha bizonytalannak érzi magát, mivel mindenhol helyes.
Hogyan tegyem az idézőjelet egy CSV mezőbe?
Helyezze az idézőjeleket a mezőbe, és duplálja a belső: "say \"hi\"". Ez az RFC 4180, és ezért a dupla idézőjelekkel teli CSV nem sérült. A fordított perjel a megfelelő CSV elemzőhöz nem jelent semmit.
Mi az előfeltétele az CSV képletsorban szereplő aposztróf?
Lecsökkenti a képletinjekciót. Az =, +, -, vagy @ karakterrel kezdődő cella képletként kerül végrehajtásra, amikor a fájl megnyílik a táblázatkezelőben, így egy megbízhatatlan forrásból származó értéket, például az =SUM(A1) kódnak lesz tekintve. Az előfeltétele az aposztróf szöveggé teszi a cellát.
Kézzel csináljam az SQL escape-elést?
Nem. A dupla idézőjel azért van dokumentálva, hogy meg kell olvasnia az escape-elt SQL-t, nem azért, mert írnia kellene — használjon parametrizált lekérdezéseket, és hagyja az illesztőprogramot az érték kezelésében. A kézzel végzett escape-elés az, ahonnan az SQL injekció ered, és nincsen olyan verziója, amely a vizsgálat során biztonságos.