az internet ablakok Android

XML attribútumok. Mikor kell elkerülni a kettős idézeteket az XML-ben

Ennek a leckének célja:

  1. Bi ismernie kell a felvételi formátumot xML nyelv
  2. A BI-nek képesnek kell lennie arra, hogy dokumentáljon egy dokumentumot XML-kód formájában
  3. BI-nek ismernie kell az adattípusokat és használhatja őket

MEGJEGYZÉS: Az XML nyelv nem olyan rövid, mint amennyit leírtunk ebben a leckében. Csak az ODA-TM rendszerben használjuk az XML-nyelv jellemzőit.

XML. Az alapítás

Az XML-t az információ küzdelemre, tárolására és szállítására hozták létre.

Az alábbi példa egy barátja barátjának egy barátjának, XML nézete:

Nikolai Ivana Emlékeztető Remélem, nem felejtette el a találkozónkat

A kódot vizuálisan elküldheti a következő formában (1. ábra).

A kódnak van egy feladója és címzettje, amelynek címe és egy üzenete van.

Célja, hogy valaki kezelje őt, elküldve és megjelenítse.

De mindazonáltal ez a dokumentum xml nem tesz semmit. Ez csak a címkékben csomagolva.

Xml - fa

Az XML-nek van egy fa szerkezete. A dokumentumnak mindig van egy gyökérelem (utasítás) A kapcsolat nem rendelkezik kapcsolattal). A fa eleme mindig leszármazottak és ősök, kivéve a gyökérelemet, amelynek nincs őse, valamint a halott végtelen elemek (fa levelek), amelyeknek nincs leszármazottai. A fa minden eleme bizonyos szintű fészkelés (a továbbiakban - "szint"). Az egyik szinten lévő elemek előzőek és a következő elemek.

Az XML használatával feltalálhatja saját címkéit

Címkék létrehozása (leírók, elemek) standard formátum nem létezik.

Az XML nyelv nem rendelkezik előre definiált címkékkel.

  • Az XML lehetővé teszi a szerző számára, hogy meghatározza saját címkéinek és saját dokumentumszerkezetét.
  • Az XML-t az adatok átvitelére használják
  • Az XML egy szoftver és hardver független eszköz az információ átviteléhez.
  • Az XML, most fontos a hálózathoz, mint HTML
  • Az XML a leggyakoribb eszköz a különböző alkalmazások közötti adatok továbbítására.
  • Az XML-t a webfejlesztés számos aspektusában használják, gyakran az adatok tárolásának és cseréjének egyszerűsítésére

XML szintaxis

XML szabályok A szintaxis nagyon egyszerű és logikus

  • Minden XML elemnek záró címkével kell rendelkeznie
  • Az XML elemeket megfelelően beágyazják (egy másikba, és semmiképpen sem, nem metszenek)
  • Az XML - A dokumentumoknak gyökérelemnek kell lenniük (az XML dokumentumoknak tartalmaznia kell egy elemet, amely az összes többi elem szülője. Ezt az elemet a gyökérelemnek nevezik.
  • Az XML-attribútumértéket idézőjelekbe kell zárni.

Hozzászólások

Ha az XML-dokumentum általános töredékét kell elvégeznie, a "láthatatlan" az analizátor programhoz, akkor megjegyzésként adható ki, mint a szimbólumok < !-- , és utána - szimbólumok --> Két sorban egy sorban.

Például:

< !-- Это комментарий -->

Az analizátor program hiányozni fog mindezt a design, még azt sem "keres".

Egy ilyen megjegyzés A szintaxix két korlátozást ír ki rajta:

  • a megjegyzésben két meghatározást nem rögzítenek;
  • a megjegyzés nem fejezhető be egy kötőjelrel.

XML elemek

Az XML elem az elem kezdeti címkéjétől kezdődik, és végül a végső.

Az elem tartalmazhat:

  • más elemek
  • szöveg
  • tulajdonságok
  • vagy az összes fenti kombinációja ...

XML szabályok elnevezése

Az XML elemeknek követniük kell ezeket az elnevezési szabályokat:

  • A nevek betűket, számokat és egyéb karaktereket tartalmazhatnak.
  • A nevek nem kezdődhetnek számmal vagy írásjelekkel
  • A nevek nem tartalmazhatnak szóközöket

Tulajdonságok

Az attribútumok biztosítják további információ Az adatok, amelyek nem része az adatoknak.

Az alábbi példában a fájl típus nem kapcsolódik az adatokhoz, de fontos a szoftverek, amelyek manipulálhatják az elemeket:

számítógép.gif.

Az XML attribútumokat idézőjelekbe kell foglalni

Az attribútumértékeknek mindig idézetekben kell lenniük. Egy vagy kettős idézet használható. Példa: A személy padlójának meghatározásához az elem a következőképpen rögzíthető:

Ha maga az attribútum értéke kettős idézeteket tartalmaz, akkor egyetlen idézeteket is használhat, mint ebben a példában:

vagy használhatja a szimbolikus objektumokat: & &

Számos példa az adattípus dátum használatára

Dátum attribútumként

Theve. Jani. EMLÉKEZTETŐ. Ne felejtsd el ezt a hétvégét!

Dátum elemként

10/01/2008 Theve. Jani. EMLÉKEZTETŐ. Ne felejtsd el ezt a hétvégét!

Dátum, mint egy elem kiterjesztett

10 01 2008 Theve. Jani. EMLÉKEZTETŐ. Ne felejtsd el ezt a hétvégét!

Metaadat attribútumok

Ezek az azonosítók használhatók az XML elemek meghatározására.

Példa:

Theve. Jani. EMLÉKEZTETŐ. Ne felejtsd el ezt a hétvégét!

Jani. Theve. Re: Emlékeztető. Nem fogok.

Az adatadatokat attribútumként kell elmenteni, és az adatokat maguknak elemként kell tárolni.

Xml. Adattípus

Beépített egyszerű típusok

dátum és idő

  • dátum idő. A formátumban dátumot és időt tartalmaz CCYY-MM-DTHH: MM: SS
  • időtartam. - Ideiglenes időtartamot képvisel, amelyet a gregory napok, órák, percek és másodpercek összetevői expresszálnak.

Például: rekord P1y2m3dt10h30m45s. Egy év (1Y), két hónap (2m), három nap (3dt), tíz órát (10 óra), harminc perc (30 m) és 45 másodperc (45s).

A felvétel rövidíthető p120m-es eszközökkel, 120 hónapos, és T120m - 120 perc.

  • idő. Tartalmaz időt a hagyományos formátumban hh: mm: ss
  • dátum. Formátumban tartalmazza a dátumot Ccyy-mm-dd
  • gyeeurmonth. Allokálja az évet és a hónap formátumban CCYY-MM.
  • gyeeur. év formátumban CCYY.
  • gmontday. Hónap és nap formátumban tartalmazza Mm-dd.
  • gday. A hónap napja formátumban Dd
  • gMONTH. Hónap formátumban Mm.

Szimbólumszövegek

húr - Alapvető karaktertípus.

Egy karaktersorozat egy Unicode szimbólumszekvencia formájában, beleértve a helyet, a lapokat, a kocsi visszatérését és a sorfordítást.

  • normalizedString- altípusa típusú - ezek húrok, amelyek nem tartalmaznak a karakter fordítás karakterek „\\ n”, vissza a kocsi „\\ R” és a vízszintes lap „\\ t”.
    • jelképes. - A Normalizedstring típusú altípus nem, továbbá, a kezdeti és végső rések és néhány szerződő rés.
      • nyelv. - altípus-token, amelyet az RFC 1766 ajánlás, például ru, en, de, fr.
      • Nmtoken. - Subtype token, csak attribútumokban használható a felsorolt \u200b\u200bértékek rögzítéséhez.
      • Név. - altípus-token, alkotja az XML nevét - betűk, számok, kötőjelek, pontok, vastagbél, aláhúzás, levelet indításával (kivéve a betűk fenntartott sorrendjét X, X, M, M, L, L A nyilvántartások bármely kombinációjában) vagy aláhúzás. A karakterláncok kezdődik xMLAz XML specifikációt használta.
        • Ncname.- Az altípus neve, amely nem tartalmaz kettőspontot. Három altípus van meghatározva: ID, Idref, Entity

Bináris típusok

  • boolen. - Bináris, logikus. Értékek: igaz vagy hamis (1 vagy 0)
  • base64Binary. - Bináris egész számok a base64 kódolásban
  • hatszögletű. - bináris egész számok hexadecimális egyenruhában további karakterek nélkül

Valós számok

  • decimális Idererálja a fix ponttal rögzített valós számokat: 123.45, -0.48747798, stb.
  • kettős. és úszó A típusok megfelelnek az IEEE754-85-nek, rögzített vagy lebegőponttal rögzítve.

Egész számok

  • egész szám - a nulla sorrendű számot tartalmazó legfontosabb teljes típusú, altípusként értendő decimális
  • szám - meghatározza a számot (a számok számának korlátozása nélkül); Tartalmazhat jelet, frakciót, valamint a fokozat mutatóját. Értékek változhatnak

1.7976931348623157E + 308 - 2,2250738585072014E-308

Van menekülési szimbólum kettős idézetek XML-ben? Szeretnék írni egy címkét:

de ha azt állítom, "ez azt jelenti, hogy a karakterlánc vége. Szükségem van valamire (C ++):

Printf ("quote \u003d \\");

Van-e olyan szimbólum, amely megírja a kettős idézet előtt, hogy elkerülje?

Új, javított válasz a régi, gyakran feltett kérdés ...

Mikor kell elkerülni a kettős idézeteket az XML-ben

Dupla idézetek (") jelennek meg kilépés nélkül :

    Az XML tankönyvben:

    Azt mondta: "Ne idézzen nekem."

    Az egy idézőjelek által elválasztott XML attribútumokban ("):

    Jegyzet: Az egyes idézetekre való áttérés (") szintén nem igényel árnyékolást:

Kettős idézet (") meg kell árnyékolni :

    A kettős idézetekkel elválasztott XML attribútumokban:

Alsó vonal

A kettős idézet (") csak" XML-ben "kell árnyékolni nagyon korlátozott kontextusban.

Ha csak gyorsan meg kell próbálnia valamit, itt van egy gyors és piszkos megoldás. Használjon egy idézeteket az attribútumértékhez:

A C ++ -ban használhatja az Escapexml ATL API-t. azt a helyes út Feldolgozás speciális karakterek...

Itt vannak gyakori szimbólumok az XML-ben árnyékolva, dupla idézőjelekkel kezdődően:

  1. a kettős idézetek (") visszaállnak"
  2. az Ampsand (&) a &
  3. egyetlen idézetek (") visszaállnak"
  4. kevésbé (<), экранируется до <
  5. több, mint (\u003e), árnyékolva\u003e

Mások válaszoltak arra, hogyan kell megbirkózni a konkrét árnyékolással ebben az esetben.

A szélesebb válasz nem próbálja meg magad csinálni. Használja az XML API-t - Sokféle gyakorlatilag minden modern programozóplatformra rendelkezésre áll.

Az XML API-k automatikusan kezelik az ilyen dolgokat, így messze Nehéz rosszul menni. Ha nem írja az XML API-t, akkor ritkán kell aggódnia az ilyen részletek miatt.

Ismét továbbra is felfedezzük az XML-t, és ebben a cikkben megismerkednek az XML struktúrákkal, például a feldolgozási utasításokkal, megjegyzésekkel, attribútumokkal és más XML elemekkel. Ezek az elemek alapvetőek és rugalmasak, a szabványnak megfelelően, hogy a bonyolultság iránti dokumentumokat tegyenek.

Néhány pillanat, mint például az XML címkék, már részben figyelembe vették az előző cikkben ". Most ismét megérintünk ezt a témát, és részletesebben elemezzük. Ez kifejezetten megkönnyíti az Ön számára az XML-tervek teljes képét.

XML elemek. Üres és nem üres XML elemek

Amint azt az előző cikkben már említettük, az XML-ben lévő címkék nem csak megjelölve vannak, mint HTML-ben, de kiosztják különálló elemek (Tárgyak). Ezenkívül az elemek hierarchikusan szerveznek információt a dokumentumban, ami viszont az XML nyelv fő szerkezeti egységeit eredményezte.

Az XML-ben az elemek kétféleek lehetnek - üres és nem üresek. Az üres elemek nem tartalmaznak semmilyen adatot, például szöveget vagy más terveket. Az üres elemektől eltérően a nem üres tartalmazhat semmilyen adatot, például szöveget vagy más elemeket és XML-terveket. A fentiek lényegének megértése érdekében fontolja meg az üres és nem üres XML elemek példáit.

Üres xml elem

Nem üres XML elem

Tartalmi elem ...

Ahogy a fenti példában látjuk, az üres elemek fő különbsége nem üres, hogy csak egy címkéből állnak. Azt is érdemes megjegyezni, hogy az XML-ben az összes név esetleg független. Ez azt jelenti, hogy a myefelement, a myelement, a myelement stb. Ők különböznek egymástól, így a pillanatot azonnal meg kell emlékezni a jövőbeni hibák elkerülésére.
Tehát az elemekkel foglalkozunk. Most lépjünk tovább a következő pillanatban, mint például az XML dokumentumok logikai szervezete.

XML-dokumentumok logikai szervezete. A fa struktúra XML adatok

Amint emlékszel, az XML nyelv fő kialakítása olyan elemek, amelyek más beágyazott szerkezetet tartalmazhatnak, és ezáltal hierarchikus struktúrát képeznek egy fa formájában. Ebben az esetben a szülőelem lesz a gyökér, és a többiek lányos elemek Az XML fa ágai és levelei vannak.

Annak érdekében, hogy megkönnyítse a fenti lényegét, vegye figyelembe a következő képet egy példával.

Amint azt látjuk, az XML-dokumentum megszervezése egy fa formájában egy meglehetősen egyszerű felépítés a feldolgozáshoz. Ugyanakkor a fa kifejező összetettsége meglehetősen nagy. Ez egy fa reprezentáció, amely a legpontosabb módja az XML objektumok leírására.

XML attribútumok. Attribútum felvételi szabályok az XML-ben

Az XML-ben az elemek olyan attribútumokat is tartalmazhatnak, amelyek hozzárendelt értékekkel rendelkeznek, amelyek egy vagy kettős idézőjelben vannak elhelyezve. Az elem attribútuma az alábbiak szerint történik:

Ebben az esetben az "attribútum" nevű attribútumot és az "érték" értéket használták. Az XML-attribútumnak azonnal észre kell vennie, hogy az XML-attribútumnak feltétlenül tartalmaznia kell, és nem lehet üres. Ellenkező esetben a kód hibás lesz az XML szempontjából.

Érdemes figyelmet fordítani az idézetek használatára. Az attribútum értékét egyetlen és kettős idézőjelben lehet csatolni. Ezenkívül lehetséges, hogy néhány idézetet is használhat a többiek belsejében. A bemutatáshoz tekintse meg a következő példákat.

Mielőtt más XML konstrukciókat folytatnánk, érdemes megjegyezni, hogy az attribútumok létrehozásakor olyan speciális karakterekként, mint az ampersand "&" vagy a szögletes zárójelek "értékeként" nem használhatók értékként.<>" Ezek a karakterek vezetőként vannak fenntartva ("és" - lényeg, és "<» и «>»Nyissa meg és lezárta az elemcímkét), és nem használható" tiszta formában ". Használja őket, hogy szükség van a specialisok cseréjére.

XML feldolgozási utasítások (feldolgozási utasítások). XML nyilatkozat

Az XML nyelven lehetővé kell tenni a dokumentumban szereplő utasításokat, amelyek bizonyos információkat hordoznak olyan alkalmazásokhoz, amelyek egy vagy egy másik dokumentumot feldolgoznak. Az XML feldolgozásra vonatkozó utasítások a következők.

Amint látható a fenti példában, XML-ben, a feldolgozásra vonatkozó utasításokat szögletes idézőjelek tartalmazzák, kérdőjelre. Ez egy kicsit emlékezteti a szokásos, amit a PHP első óráiban figyelembe vettünk. A feldolgozási utasítás első részében az alkalmazás vagy a rendszer, amely az utasítás második részére vagy annak tartalmára vonatkozik. Ebben az esetben a feldolgozásra vonatkozó utasítások csak azokra az alkalmazásokra érvényesek, amelyeket az általuk kezelnek. A feldolgozási utasítás példája lehet a következő utasítás.

Érdemes megjegyezni, hogy az XML-ben van egy speciális design, amely nagyon hasonlít a feldolgozásra vonatkozó utasításokhoz, de ő maga nem így van. Az XML nyilatkozatról beszélünk, amely továbbítja a feldolgozást szoftver Néhány információ az XML-dokumentum tulajdonságairól, például a kódolásról, a nyelvi változatról, amelynek megfelelően van írva ez a dokumentum stb.

Amint a fenti példából látható, az XML-deklaráció az úgynevezett pszeudo-attribútumokat tartalmazza, amelyek nagyon hasonlítanak a szokásos attribútumokhoz, amelyeket kissé felkészítettünk. Az a tény, hogy definíció szerint az XML nyilatkozat és a feldolgozási utasítások nem tartalmazhatnak attribútumokat, így ezek a hirdetések pszeudo-attribents. Érdemes emlékezni a jövőre, hogy elkerülje a változatos hibákat.

Mivel foglalkozunk a pszeudo-attributiummal, nézzük meg, mit jelentenek.

  • Kódolás - A kódolásért felelős XML dokumentum. Általában UTF8 kódolást használ.
  • A verzió az XML nyelv verziója, amelyen ez a dokumentum meg van írva. Ez általában XML 1.0 verzió.

Nos, most menjünk a cikk záró részéhez, és vegye figyelembe az ilyen XML formatervezést a CDATA megjegyzéseinek és szakaszainak.

  • Átruházás
  • Tutorial

SQL injekció, keresztsoros kérések hamisítása, sérült XML ... ijesztő, szörnyű dolgok, ahonnan mindannyian szeretnénk megvédeni magad, de csak tudom, miért történik. Ez a cikk megmagyarázza az alapvető koncepciót mindezek mögött: sorok és sorok feldolgozása belső vonalak.

Fő probléma

Ez csak a szöveg. Igen, csak szöveg - itt ez a fő probléma. Szinte mindent a számítógépes rendszerben a szöveg képviseli (amely viszont bájtok képviselik). Az, hogy egyes szövegek egy számítógépre és mások számára készültek. De ezek még mindig a szöveg. Ahhoz, hogy megértsem, mit beszélek, egy kis példát adok:
Homo Sapiens. Tegyük fel, hogy van az angol szöveg, amelyet nem akarok oroszul lefordítani

Ne higgye el: szöveg. Néhány ember XML-nek nevez, de ez csak a szöveg. Talán nem alkalmas az angol tanár bemutatására, de még mindig csak szöveg. Nyomtathatod egy poszterre, és sétálhat vele a gyűlésekre, írhatod az anyád betűjébe ... Ez a szöveg.

Mindazonáltal azt szeretnénk, hogy a szöveg bizonyos részeinek értéke legyen a számítógépünknek. Azt szeretnénk, hogy a számítógép képes legyen kivonni a szöveg szerzőjét és a szöveget külön, hogy mit tehetsz vele. Például konvertálja a fent említett ehhez:
Tegyük fel, hogy van az angol szöveg, amelyet nem akarok oroszul lefordítani a homo sapiens
Hol tudja a számítógépet, hogyan kell csinálni? Nos, mert nagyra becsültük a szöveg egyes részeit speciális szavakkal a szórakoztató zárójelben, például, például, és. Mivel megcsináltuk, olyan programot tudunk írni, amely ezeket a bizonyos részeket keresi, eltávolította a szöveget, és bármilyen saját találmányunkhoz használná.

Más szóval, bizonyos szabályokat használtunk a szövegünkben, hogy azonosítsuk néhány különös jelentőséget, hogy valaki, megfigyeljék ugyanazokat a szabályokat, használhatják.
Oké, ez nem olyan nehéz megérteni. És mi van, ha ezeket a vicces zárójeleket szeretnénk használni, amelyek a szövegünkben különleges jelentőségűek, de anélkül, hogy ezt a jelentést használnánk?

Homo Sapiens. < n and y >

Szimbólumok "<" и ">"Nem különlegesek. Jogilag bárhol használhatók, bármilyen szövegben, mint a fenti példában, de hogyan gondolkodunk a speciális szavakkal kapcsolatos ötletünk, mint például? Ez azt jelenti, hogy ez valamiféle kulcsszó? XML-ben Igen. És talán nem. Ez kétértelmű. Mivel a számítógépek nem tudnak megbirkózni a kétértelműséggel, akkor valami eredményként előre nem látható eredményt adhat, ha nem zavarjuk az I-nél nagyobb pontokat, és nem szabad kiküszöbölni a kétértelműséget.
Megoldhatja ezt a dilemmát, cserélje ki a kétértelmű szimbólumokat valami egyértelműen.
Homo Sapiens. Az alapvető matematika azt mondja, hogy ha x< n and y > N, x nem lehet nagyobb, mint Y.

Most a szövegnek teljesen egyértelműnek kell lennie. "<" равносильно "<", а ">" - ">".
Ennek technikai meghatározása - Árnyékolás , Elkerüljük a speciális szimbólumokat, amikor nem akarjuk, hogy legyen saját fontossága.
Escape | ISKāp | [Nincs obj. ] Szünetmentes [OBJ. ] Ne veszítse el / ne emlékezzen [...] [OBJ-vel. ] IT: másképp értelmezhető [...]
Ha a szövegben szereplő karakterek bizonyos karakterei vagy szekvenciái különösen fontosak, olyan szabályoknak kell lenniük, amelyek meghatározzák azokat a helyzeteket, amelyekben ezeket a karaktereket fel kell használni anélkül, hogy különleges fontosságukat vonzana. Vagy más szavakkal, árnyékoló válaszol a kérdésre: "Ha ezek a karakterek olyan különlegesek, akkor hogyan kell használni őket a szövegedben?".
Mivel a fenti példában észlelték, az Ampersand (&) szintén speciális szimbólum. De mit kell tennie, ha írni akarunk "<", но без интерпретации этого как "<"? В XML, escape-последовательность для &, это - " & ", т.е. мы должны написать: " &< "

Más példák

Az XML nem a speciális karakterekből származó "szenvedés" eset. Bármely programozási nyelv bármely forráskódja bemutathatja azt:
Var name \u003d "homo sapiens"; VAR Tartalom \u003d "Tegyük fel, hogy van az angol szöveg, amelyet nem akarok oroszul lefordítani";
Minden egyszerű - a szokásos szöveg egyértelműen elkülönül a "Nem szöveg" kettős idézetektől. Ugyanígy a matematikai analízis kurzus szövege használható:
Var name \u003d "homo sapiens"; VAR Tartalom \u003d "Alapvető matematika azt mondja nekünk, hogy ha x< n and y > N, X nem lehet nagyobb, mint Y. ";
Menő! És még csak nem kell árnyékolást igényelni! De várj, és mi van, ha szeretnék valakit idézni?
Var name \u003d "homo sapiens"; VAR Tartalom \u003d "Platón azt mondják, hogy egyszer azt mondta:" Lorem Ipsum Dolor Sit Amet ".";
Hmm ... szomorúság, vágyakozás. Személyként meg tudja határozni, hogy a szöveg kezdődik és végződik, és ahol az idézet található. Mindazonáltal ismét kétértelművé vált minden számítógéphez. Egyfajta árnyékoló szabályokkal kell rendelkeznünk, amelyek segítenek nekünk megkülönböztetni a szó szerinti "és", ami a szöveg végét jelenti. A legtöbb nyelv programozás Használja a ferde funkciókat:
Var name \u003d "homo sapiens"; VAR Tartalom \u003d "Platón azt mondják, hogy egyszer azt mondta \\" Lorem Ipsum Dolor Sit Amet \\ ";
"" A szimbólum után nem különleges. De ez ismét azt jelenti, hogy "\\" egy speciális szimbólum. A szövegben lévő szimbólum egyértelmű írásához ugyanazt a szimbólumot kell hozzáadnia az írásban: "\\\\". Vicces, igaz?

Támadás!

Nem minden olyan rossz lenne, ha csak árnyékolást kellett igénybe venni. Természetesen törzsek, de ez nem annyira szörnyű. Problémák kezdődnek, ha néhány program szöveget írhat más programokhoz, hogy "olvassa el". És nem, ez nem sci-fi, folyamatosan történik. Például ezen az oldalon, akkor közzé egy üzenetet, a készülék nem tárcsázza azt kézikönyv HTML formátumban, és írj csak a szöveget, hogy ennek következtében átalakul ez a webhely HTML, ami után a böngésző már alakítjuk " "HTML újra létrehozva olvasható szövegben.

Egy másik közös példája és forrása számos biztonsági probléma - SQL kérések. SQL - Nyelv, amely egyszerűsíti a kommunikációt az adatbázisokkal:
Ebben a szövegben gyakorlatilag nincs speciális karakter, főként angol szavak. És mégis, sőt, minden szó SQL-ben különleges jelentéssel bír. Számos programozási nyelven használják világszerte egy formában vagy másként, például:
$ Query \u003d "Válassza ki a telefonszámot a felhasználók közül, ahol \u003d" Alex ""; $ eredmény \u003d mysql_query ($ lekérdezés);
Ez a két egyszerű vonal kivonuljon tőlünk egy szörnyen összetett feladatot egy olyan adatbázis-program kérésére, amely megfelel a követelményeknek. Az adatbázis "Sieves", esetleg terabájt a bitek és bájtok, hogy visszatérjen egy gyönyörűen formázott eredmény a program, amely megkérdezett. Komolyan, mindezen szar egy egyszerű anglo-szerű javaslatban kapszulázott.

Annak érdekében, hogy hasznos legyen, az ilyen kérések nem kemények, de a felhasználói bemenet alapján épülnek fel. Ez a javaslat a különböző felhasználók használatára irányul:
$ NAME \u003d $ _POST ["NAME"]; $ Query \u003d "Válassza ki a telefonszámot a felhasználóktól, ahol a név \u003d" $ név "; $ eredmény \u003d mysql_query ($ lekérdezés);
Abban az esetben, ha egyszerűen látja ezt a cikket: Ez egy anti-példa! Ez a legrosszabb, amit valaha is tehetsz! Ez egy biztonsági rémálom! Minden alkalommal, amikor valamit írsz, meg fog halni egy ártatlan cica! Ktulhu meg fogja szüntetni a lelket!

És most nézzük meg, mi történik itt. $ _POST ["NAME"] - olyan érték, amelyet egy véletlenszerű felhasználó véletlenszerű formába lépett a véletlenszerűen webhelyen. A program létrehoz egy SQL lekérdezést, amely ezt az értéket olyan felhasználónévként használja, amelyet az adatbázisban szeretne megtalálni. Ezután ezt az SQL "ajánlatot" egyenesen az adatbázisba küldi.

Úgy tűnik, hogy minden úgy hangzik, nem olyan szörnyű, igen? Próbáljunk meg több véletlenszerű értéket adni, amelyek beírhatók a véletlen webhelyére, és milyen kéréseket fogunk kimutatni:

Alex.
Válassza ki a telefonszámot a felhasználóktól, ahol a név \u003d "alex"
Mcdonald's.
Válassza ki a telefonszámot a felhasználóktól, ahol a név \u003d "mc" donalds "
Joe "; Drop asztali felhasználók; -
Válassza ki a telefonszámot a felhasználóktól, ahol a név \u003d "Joe"; Drop asztali felhasználók; - "
Az első kérés nem szembesül, de nagyon szép, igaz? A 2. szám, úgy tűnik, hogy "némileg" károsítja a szintaxisunkat a kétértelmű. "A fenébe német! 4-es számú hülye. Ki írná ezt? Nem értelme ...
De nem az adatbázis-feldolgozási kérelemre ... Az adatbázisnak nincs semmi, ahol ez a kérés jött, és mit jelent. Az egyetlen dolog, amit ő lát, két kérés: Keressen egy Joe nevű felhasználói számot, majd törölje a felhasználói táblát (amely egy megjegyzéshez mellékelve "), és sikeresen megtörtént.

Az Ön számára ez nem lehet hír. Ha igen, akkor kérjük, olvassa el újra ezt a cikket, mert Ön egy újonc programozás, vagy az elmúlt 10 évben egy barlangban élt. Ez a példa illusztrálja az egész világon használt SQL injekciók alapjait. Az adatok törlése, vagy olyan adatok megszerzése érdekében, amelyeket nem szabad egyszerűen megszerezni, vagy jelentkezzen be, joga nélkül stb. És mindezt, mert az adatbázis túlságosan szó szerint érzékeli az anglo-szerű "mondatot".

Oooeeeee!

Következő lépés: XSS támadások. Ugyanúgy működnek, csak a HTML-re vonatkoznak.
Tegyük fel, hogy eldöntötte az adatbázis problémáit, adjon adatokat a felhasználóból, írja le az adatbázisba, és adja meg őket a webhelyhez, hogy hozzáférjen a felhasználókhoz. Ez az, ami tipikus fórumot, megjegyzésrendszert stb. Valahol a webhelyén van valami ilyesmi:

Általa megosztva. TOVÁBB.


Ha a felhasználók jó és kedvesek, akkor a régi filozófusok idézeteit helyezik el, és az üzenetek a következő típusúak lesznek:

Írta: Plato január 2-án, 15:31

Azt mondtam, hogy azt mondtam, hogy "Lorem Ipsum Dolor Sit, Consertetur Adipising Elit, Sed do Eiusmod Ideim Abididunt Ut Labore et Dolore Magna Aliqua. UT ENIM AD MINIM VENIAM, QUIS Nostrud gyakorlás Ullamco Laboris Nisi Ut Aliquip Ex Ea Commodo Compat."


Ha a felhasználók okosak, valószínűleg matematikáról beszélnek, és ezek az üzenetek lesznek:

Írta: Pascal november 23-án, 04:12

Az alapvető matematika azt mondja, hogy ha x< n and y > N, x nem lehet nagyobb, mint Y.


Hmm ... ismét ezek a zárójelek alapértelmezései. Nos, technikai szempontból kétértelműek lehetnek, de a böngésző megbocsátja nekünk ezt, ugye?


Nos, állj meg, milyen pokol? Milyen joker bemutatta a JavaScript címkéket a fórumához? Bárki, aki erre az üzenetre néz, most betölti és végrehajtja a szkripteket a webhelye keretében, amely nem rendelkezik a hírekkel. És ez nem jó.

Nem értik szó szerint

A fenti esetekben valahogy tájékoztatni szeretnénk adatbázisunkat vagy böngészőt, hogy ez csak egy szöveg, nem tesz semmit vele! Más szóval, szeretnénk "törölni" az összes speciális karakter speciális értékeit és kulcsszavak A felhasználó által szolgáltatott információkból, mert nem bízunk benne. Mit kell tenni?

Mit? Mit mondasz, fiú? Ó, azt mondod, hogy "árnyékolás"? És teljesen igaza van, vegye be a cookie-t!
Ha a kérelem kombinálásával a felhasználói adatokra váltunk a felhasználói adatokhoz, a probléma megoldódott. Adatbázisokat kérünk, ez lesz valami, mint:
$ NAME \u003d $ _POST ["NAME"]; $ NAME \u003d mysql_real_escape_string ($ név); $ Query \u003d "Válassza ki a telefonszámot a felhasználóktól, ahol a név \u003d" $ név "; $ eredmény \u003d mysql_query ($ lekérdezés);
Csak egy sor kód, de most senki más nem tud "hack" az adatbázisunkat. Lássuk újra, hogy az SQL kérések hogyan fognak megjelenni a felhasználói bejegyzéstől függően:
Alex.
Válassza ki a telefonszámot a felhasználóktól, ahol a név \u003d "alex"
Mcdonald's.
Válassza ki a telefonszámot a felhasználóktól, ahol a név \u003d "mc \\" donalds "
Joe "; Drop asztali felhasználók; -
Válassza ki a telefonszámot a felhasználóktól, ahol a név \u003d "Joe \\"; Drop asztali felhasználók; - "
Mysql_real_escape_string anélkül, hogy az elemzés elhelyezi a ferde vonalat mindent, ami valamilyen különleges jelentés lehet.


A HTMLSPecialchars funkciót minden felhasználói adathoz használjuk, mielőtt elhozzuk őket. Most a pesti üzenet így néz ki:

Írta: jacktr július 18, 12:56


Felhívjuk figyelmét, hogy a felhasználóktól kapott értékek nem igazán "sérültek". Bármilyen böngésző parsit Ez olyan, mint a HTML, és mindent megjelenít a megfelelő formában.

Mi hozza vissza minket ...

Mindezek a sok rendszerre jellemző problémát mutatják: a szövegben szereplő szövegnek árnyékolandónak kell lennie, ha feltételezzük, hogy nincs speciális karaktere. A szöveges értékek SQL-be \u200b\u200btörténő elhelyezése, azokat az SQL szabályai árnyékolják. A szöveges értékek HTML-be történő elhelyezése, azokat a HTML-szabályoknak meg kell árnyékolni. A szövegértékek (technológiai név) elhelyezésével a szabályokat (technológiai név) kell árnyékolni. Ez minden.

A teljes képért

Természetesen más módok vannak a felhasználói feltalálók leküzdésére, amelyeknek nem tartalmazhatnak speciális karaktereket:
  • Érvényesítés.
    Ellenőrizheti, hogy a felhasználói bejegyzés megfelel-e bizonyos megadott specifikációnak. Ha a szám bevitelét igényli, és a felhasználó belép valami mást, a programnak tájékoztatnia kell őt róla, és törölnie kell a bemenetet. Ha mindez megfelelően szerveződik, akkor nincs kockázat a "Drop asztali felhasználók" megragadására, ahol azt feltételezték, a felhasználó bemutatja a "42" -t. Ez nem túl praktikus, hogy elkerülje a HTML / SQL injekciókat, mert Gyakran szükség van egy szabad formátum szövegének elfogadására, amely "kirándulást" tartalmazhat. Általában az egyéb intézkedéseken kívül érvényesítik az érvényesítést.
  • Sanitizáció
    Azt is "nedves", hogy eltávolítson olyan karaktereket, amelyeket veszélyesnek tart. Például egyszerűen távolítsa el a hasonló HTML-címkét, amely elkerüli a fórum hozzáadását. A probléma az, hogy a szöveg meglehetősen legitim részeit törölheti.
    Elkészített SQL utasítások
    Vannak olyan speciális funkciók, amelyek valamit elérhetünk: arra kényszerítve az adatbázist, hogy megértse az SQL kérés és a felhasználók által szolgáltatott információk közötti különbségeket. Az RNR-ben így néz ki:
    $ Stmt \u003d $ pdoO -\u003e előkészítése ("Válassza ki a telefonszámot a felhasználóktól, ahol a név \u003d?"); $ Stmt-\u003e végrehajtás ($ _ Post ["Név"]);
    Ugyanakkor a küldés két szakaszban fordul elő, egyértelműen megkülönböztetve a kérést és a változókat. Az adatbázis képes először megérteni a lekérdezési struktúrát, majd töltse ki az értékeket.

  • A valós világban mindezt különböző védelmi lépésekhez használják. Mindig ellenőrizze az ellenőrzési ellenőrzést (érvényesítést), hogy biztos legyen abban, hogy a felhasználó helyes adatokat ad. Ezután lehet (de nem köteles) beolvasni a megadott adatokat. Ha a felhasználó egyértelműen megpróbálja "meghajtani" egy szkriptet az Ön számára, egyszerűen törölheti. Ezután mindig mindig meg kell őriznie az egyéni adatokat, mielőtt elhelyezné őket egy SQL lekérdezésbe (ugyanez vonatkozik a HTML-re).

Hosszú ideig a szabvány előírja a szokásos idézeteket Html -text Az attribútumok kijelölésére alkalmazzák az "idézőcímkéken belül" terveket.

Azonban még nem találkoztam egy böngészőn, amely nem mutatná meg, hogy az idézet egy egyszerű szimbólum "bármely címkéken kívül. Tehát mondd meg nekem, kedves kollégái, talán a" külső címkék használata egyszerűen senki sem lehet senki sem? Biztonságosan és nem látszólag írható "? Különösen a szövegekben, ahol sok idézet, valamint a szigorú tervezési szabályok betartása (a nemzeti idézetek helyes használatáról) irreleváns.

Imho, sokan ... De a kérdés nem teljesen világos: ha megérted, hogy a szabványok szerint meg kell írni az idézeteket, mint ", de lusta, annak ellenére, hogy sok webhely működik, és mit vársz Hallgasd meg, hogy az idézetek megjelenítése a böngészők új verzióiban marad-e, senki sem tudja, hogy ismét nyilvánvaló ajánlást adjon meg újra: nem akarja problémákat a következő 100% -ban - tartani a szabványokat :), de ezt is tudod Ön. Vagy várja a megerősítést: Igen. Ez minden, Chas, és 10 év után minden ugyanaz lesz, mint én, én vagyok (Microsoft, Mozilla i.t.d garancia?

Lynn "Coffeeman" [Dosszié]
Igen, egyébként ... Most felmászottam, hogy olvassam, sehol nem érvelnek, hogy idézőjeleket kell képviselni az űrlapon "
http://www2.stack.ru/~julia/html401/charset.html:

Egyes szerzők egy hivatkozás a szimbolikus lényeg „” „kódolására kettős idézőjelek (”) esetek, hiszen ez a jel lehet, hogy külön attribútum értékeit.

arról, hogy kell Használja az entitást, csak mondja<, > És és:

Ha a szerző a szövegbe szeretné tenni a szimbólumot "<", во избежание возможной путаницы с началом тега (метка начала тега) он должен использовать ссылку "<" (десятичный код ASCII 60). Точно так же во избежание проблем со старыми версиями пользовательских агентов, некорректно принимающих символы ">"A címke végére (a címke végének címkéje), használd a"\u003e "linket (ASCII 62 decimális kód).

A karakterekkel kapcsolatos kapcsolatokkal való zavart elkerülése érdekében a "&" szimbólum helyett a "&" szimbólum helyett a "&" linket kell használni (ASCII 38 decimális kód). Ezenkívül a "&" linket az attribútumértékekben is fel kell használni, mivel a CDATA attribútum értékeiben lévő karakterekre való hivatkozások megengedettek.

De csak azt várom, hogy valami, mint egy lynn válasz: hogy nincs semmi valójában. Nem mentem el engem - a népszerű tankönyvekről és a megfontolásokról "mindenki ezt teszi".

Vagy más lehetőség: De ha követed az új szabványokat, amivel nem szembesültem a gyakorlatban - mint az XHTML (olyan volt, mintha xhtml-t ellenőriztem), akkor az ilyen fókusz nem fog átadni. Ezért nem szükséges problémákat létrehozni az írott HTML -KODE hordozhatóságával.

Nos, vagy végül: Te magad csinálod magad?

és egyébként hasonló kérdéshez vezet. A fenti dokumentumban a dokumentum azt mondja: "A zavart elkerülése érdekében". De a zavart csak akkor lehetséges, ha az adott kódok egyikét és követi. És ha igen, mondjuk, az URL típus ".... / Script? A \u003d 1 & B \u003d 2"? Kockázhatok valamit, ha véletlenül Href jelezte, hogy egy ilyen URL-t (amely természetesen működik megfelelően a teszt alatt)? Valami, kivéve a rendkívül valószínűtlen helyzetet, hogy 10 év alatt (amikor az oldal elavult vagy tízszer újraíródik), az extravagáns névvel és a B-vel végleges; ? Más szóval, milyen alaposan kell ellenőriznie az ilyen eseteket?

Daniel, ha biztos abban, hogy a meglévő kódokkal nincs probléma - írhat és egyszerűen &. Ha egy új kód jelenik meg a jövőben, akkor úgy gondolja, hogy nyilvánvalóan nem a HTML 4.01 specifikációban, ezért nem érinti a szokásos bejelentett dokumentumot. Vagy kiszámítja, hogy biztosítsa magát a jövőbeli szabványok támogatásával egyszerű változás Dokumentumrendszerek?

Daniel Alievsky [Dosszié]
Az XML-ben a szokásos idézetek szövegként nem jelent problémát (természetesen az XHTML-ben). Az Imho idézeteket általában csak egy oknál fogva fordítják - nem akarok két funkciót írni, hogy szöveget hozzon létre egy biztonságos elme, amikor az XML / HTML / XHTML-ben helyettesíti.