CSRF în dezvoltarea mobilă: esența, tipurile de atacuri și metodele de protecție

Autor: IT Sectr Publicat: 2026-04-06 Timp de citire: 9 min

CSRF (Cross-Site Request Forgery) — un tip de atac în care atacatorul forțează browserul victimei să trimită o cerere falsificată pe serverul țintă în numele unui utilizator autentificat. Potrivit OWASP, 2026, CSRF se află în top zece cele mai critice riscuri pentru aplicațiile web. În contextul dezvoltării mobile, atacurile CSRF sunt deosebit de periculoase pentru REST API-urile care folosesc autentificare prin cookie. Falsificarea cererii intersite rămâne o amenințare actuală, în ciuda implementării mecanismelor moderne de protecție.

Principalele

  • CSRF — atac care exploatează încrederea serverului în browserul utilizatorului autentificat
  • Scopul principal — executarea de acțiuni în numele victimei fără consimțământul acesteia: transfer de fonduri, schimbarea parolei, ștergerea datelor
  • Autentificarea prin cookie — vectorul principal: browserul atașează automat cookie-urile la cereri, iar serverul nu deosebește cererea legitimă de cea falsificată
  • Token-urile CSRF — metoda principală de protecție: un token secret unic este verificat pe server înainte de executarea operației
  • SameSite — atribut al cookie-ului care limitează trimiterea cookie-urilor la cererile cross-domain, reducând semnificativ riscul CSRF

Ce este un atac CSRF?

CSRF (Cross-Site Request Forgery) este un atac în care atacatorul creează o cerere falsificată și forțează browserul victimei să o trimită pe serverul țintă. Serverul execută cererea deoarece primește cookie-credentials valide ale sesiunii curente a utilizatorului. Atacul este posibil deoarece browserul adaugă automat cookie-uri la fiecare cerere către domeniul țintă, indiferent de pagina de pe care a fost trimisă cererea. Utilizatorul s-ar putea să nu fi văzut pagina atacatorului — este suficient să se încarce un <img>, <form> sau <iframe> ascuns cu un URL malefic. CSRF nu fură date direct — atacul execută acțiuni în numele victimei (operații de schimbare a stării), cum ar fi transferul de bani, schimbarea parolei sau ștergerea contului.

Care operații sunt cele mai vulnerabile?

Atacurile CSRF vizează exclusiv operațiile care modifică starea — cereri GET cu efecte secundare, POST, PUT și DELETE. De exemplu, o cerere de schimbare a adresei de email în contul personal: dacă serverul acceptă cererea fără a verifica originea, atacatorul poate înlocui adresa cu a sa și poate iniția resetarea parolei. Atacul este deosebit de periculos pentru sistemele bancare, panourile de administrare și rețelele sociale, unde o singură acțiune are consecințe grave. API-urile aplicațiilor mobile care folosesc cookie-uri pentru autentificare sunt, de asemenea, susceptibile la CSRF dacă nu aplică verificări suplimentare.

Cine este în zona de risc?

Sub atac cad orice aplicații web și API-uri unde autentificarea se bazează pe cookie, iar serverul nu verifică originea cererii. Aplicațiile mobile care folosesc WebView pentru autentificare prin formulare web sunt, de asemenea, vulnerabile: componenta browserului trimite automat cookie-urile, iar atacatorul poate injecta o cerere malefică prin încărcare în fundal. Potrivit HackerOne (2025), aproximativ 12% din toate rapoartele de vulnerabilități în aplicațiile web sunt legate de lipsa protecției împotriva CSRF.

Ce face CSRF periculos?

Caracteristica principală a CSRF este invizibilitatea pentru victimă. Utilizatorul poate nici măcar să nu bănuiască că atacul a avut loc: cererea falsificată se execută în fundal, iar interfața aplicației nu arată semne de spargere. Singura modalitate de a detecta CSRF este monitorizarea jurnalelor serverului sau modificări bruște în cont. În plus, CSRF se combină ușor cu alte vulnerabilități, cum ar fi XSS sau redirecționările deschise, ceea ce multiplică de mai multe ori daunele.

Cum funcționează un atac CSRF?

Atacul CSRF constă din trei condiții obligatorii: victima este autentificată pe site-țintă, serverul folosește autentificare prin cookie, iar cererea atacatorului este direcționată către URL-ul acțiunii. Atacatorul creează o pagină HTML cu un formular, script sau imagine al cărei atribut src indică URL-ul țintă. Browserul victimei încarcă această pagină și trimite automat cererea pe server împreună cu cookie-ul sesiunii curente. Serverul primește cookie-uri valide, nu verifică sursa cererii și execută operația.

html
<!-- Exemplu de atac CSRF printr-un formular ascuns -->
<form action="https://bank.example.com/transfer"
      method="POST" id="csrf-form">
    <input type="hidden"
           name="toAccount"
           value="attacker-account">
    <input type="hidden"
           name="amount"
           value="10000">
</form>
<script>document.getElementById("csrf-form").submit()</script>

După încărcarea paginii, scriptul trimite imediat formularul. Browserul atașează cookie-ul de sesiune al utilizatorului la cererea POST către bank.example.com. Serverul băncii verifică cookie-ul, confirmă autentificarea utilizatorului și efectuează transferul în contul atacatorului. Victima vede o pagină goală sau legitimă, iar banii au fost deja debitați.

Rolul browserului în CSRF

Caracteristica cheie a protocolului HTTP — absența verificării încorporate a sursei cererii. Browserul adaugă cookie-ul la cerere dacă domeniul cererii coincide cu domeniul cookie-ului. Atacatorul nu trebuie să cunoască conținutul cookie-ului — browserul face acest lucru automat. Same-origin policy nu protejează împotriva CSRF, deoarece atacul vizează serverul, nu citirea răspunsului. Mecanisme precum CORS sunt, de asemenea, neputincioase: cererile CSRF nu necesită de obicei citirea răspunsului pentru a provoca daune.

Principalele tipuri de atacuri CSRF

Atacurile CSRF se clasifică după metoda de livrare a cererii malefice. Fiecare tip folosește un element HTML diferit pentru a trimite cererea, dar toate se bazează pe trimiterea automată a cookie-urilor de către browser. Alegerea metodei depinde de obiectivele atacatorului: atacurile GET-based necesită mai puțin cod, POST-based ocolesc mai sigur unele protecții, iar XMLHttpRequest-based permit manipularea header-elor.

Tip de atacVector de livrareMetoda HTTPDificultatea detectării
GET-based<img>, <script>, <iframe>GETRidicată
POST-based<form> ascuns + trimitere automatăPOSTMedie
XHR-basedXMLHttpRequest cu CORSOricareScăzută

GET-based CSRF

Cea mai simplă metodă: atacatorul plasează pe pagină un <img> cu un URL care conține parametrii cererii. Browserul încarcă imaginea și trimite o cerere GET pe server. De exemplu, <img src="https://api.example.com/delete?postId=123" /> șterge înregistrarea dacă serverul procesează DELETE prin GET. În ciuda pericolului evident, unele API-țuri încă mai folosesc GET pentru operații de ștergere sau actualizare.

POST-based CSRF

Dacă serverul acceptă doar cereri POST, atacatorul creează un formular ascuns cu metoda POST și îl trimite automat prin JavaScript. Formularul nu este afișat pe ecran (toate <input> au type="hidden"), iar autofocus + .submit() funcționează fără clicul utilizatorului. Atacurile POST-based nu funcționează dacă serverul verifică header-ul Content-Type, dar majoritatea API-urilor acceptă application/x-www-form-urlencoded standard.

XHR-based CSRF (cu CORS)

XMLHttpRequest sau Fetch API permit trimiterea de cereri cu header-e arbitrare. Dacă serverul a configurat CORS prea larg (Access-Control-Allow-Origin: *), atacatorul poate trimite orice cerere și citi răspunsul. Cu toate acestea, pentru un atac CSRF citirea răspunsului nu este necesară — este suficientă executarea acțiunii. Browserele moderne trimit o cerere preflight OPTIONS înainte de cererile non-standard, ceea ce poate bloca XHR-based CSRF dacă serverul este configurat corect.

CSRF în aplicațiile mobile

Aplicațiile mobile sunt mai puțin vulnerabile la CSRF decât site-urile web, deoarece aplicațiile native folosesc rareori autentificarea prin cookie. În schimb, API-urile mobile aplică mai des token-uri în header-ul Authorization (token-uri Bearer, JWT). Totuși, există scenarii în care un atac CSRF este posibil: WebView cu autentificare web, aplicații hibride și API-uri cu sesiuni bazate pe cookie. Potrivit TechCrunch (2025), aproximativ 18% din API-urile publice ale aplicațiilor mobile încă mai suportă cookie-uri de sesiune.

CSRF prin WebView

Multe aplicații deschid pagini web în WebView — autentificare prin OAuth, formulare de plată, vizualizare de conținut. WebView este un browser complet în interiorul aplicației care stochează cookie-uri de sesiune. Dacă atacatorul găsește o modalitate de a-și încărca propriul URL în WebView (printr-o redirecționare deschisă sau Deep Link), poate executa un atac CSRF exact ca într-un browser obișnuit. Protecție — folosirea Chrome Custom Tabs sau SFSafariViewController în loc de WebView pentru operații critice.

CSRF în API-uri cu autentificare JWT

Token-urile JWT sunt de obicei stocate în localStorage sau în memoria aplicației și nu sunt trimise automat — dezvoltatorul adaugă explicit header-ul Authorization la fiecare cerere. Acest lucru face imposibil atacul CSRF clasic. Totuși, dacă aplicația stochează JWT în cookie (ceea ce este rar, dar se întâmplă), riscul revine. Protecție suplimentară — legarea JWT de o origine specifică a cererii prin claim-ul azp sau aud, ceea ce previne utilizarea token-ului pe un alt domeniu.

javascript
// Exemplu de verificare pe server a token-ului CSRF în Express
const csrfProtection = (req, res, next) => {
    const token = req.headers['x-csrf-token'];
    if (!token || token !== req.session.csrfToken) {
        return res.status(403).json({ error: 'CSRF validation failed' });
    }
    next();
};

// Generarea token-ului CSRF la autentificare
app.post('/api/login', (req, res) => {
    const csrfToken = crypto.randomBytes(32).toString('hex');
    req.session.csrfToken = csrfToken;
    res.json({ csrfToken: csrfToken });
});

Metode de protecție împotriva CSRF

Protecția modernă împotriva CSRF se bazează pe trei niveluri: token-uri CSRF pe server, atributul SameSite pentru cookie și verificarea header-ului Origin. Combinarea acestor metode asigură protecție împotriva a 99% din atacurile CSRF fără un impact semnificativ asupra UX. Alegerea abordării specifice depinde de arhitectura aplicației: unui site web îi este suficient SameSite=Lax, API-ul unei aplicații mobile necesită token-uri în header-e.

Token-uri CSRF (sincronizator)

Metoda standard: serverul generează un token unic, îl leagă de sesiunea utilizatorului și îl transmite clientului. Clientul include token-ul în fiecare cerere care modifică starea (în câmpul ascuns al formularului sau header-ul X-CSRF-Token). Serverul compară token-ul primit cu cel stocat în sesiune. Token-ul trebuie să fie criptografic sigur, aleatoriu, de cel puțin 32 de octeți și să se schimbe la fiecare sesiune sau operație. Durata de viață a token-ului — nu mai mult de câteva ore.

SameSite Cookie

Atributul SameSite pentru cookie limitează trimiterea cookie-urilor la cererile cross-domain. Valoarea Lax permite trimiterea cookie-urilor doar pentru cererile GET de navigare de nivel superior — acest lucru este suficient pentru majoritatea site-urilor. Strict blochează cookie-urile pentru toate cererile cross-domain, inclusiv navigarea: utilizatorul va trebui să se autentifice din nou la trecerea de pe un alt site. Potrivit Chrome Platform Status (2026), SameSite=Lax este activat implicit în toate browserele moderne, ceea ce a redus numărul de atacuri CSRF cu 67%.

Verificarea Origin și Referer

Serverul poate verifica header-ele Origin sau Referer ale cererii primite. Dacă cererea provine de pe un alt domeniu — este blocată. Origin este mai fiabil decât Referer, deoarece este întotdeauna prezent în cererile POST și nu este dezactivat de politicile browserului. Implementare: o listă albă de origin-uri permise, compararea cu valoarea curentă a header-ului. Metoda este eficientă, dar complexă cu aplicațiile mobile, unde header-ele Origin pot lipsi sau pot fi falsificate.

kotlin
// Exemplu de verificare a token-ului CSRF în Spring Boot
@Configuration
@EnableWebSecurity
class SecurityConfig {
    @Bean
    fun securityFilterChain(
        @Autowired http: HttpSecurity
    ): SecurityFilterChain {
        return http
            .csrf { it.csrfTokenRepository(
                CookieCsrfTokenRepository.withHttpOnlyFalse()
            ) }
            .sessionManagement {
                it.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
            }
            .build()
    }
}

Double Submit Cookie

Metodă care nu necesită stocarea token-ului pe server: serverul setează un cookie cu o valoare aleatorie, clientul citește valoarea din cookie și o trimite înapoi în header-ul sau corpul cererii. Serverul compară ambele valori. Dacă atacatorul nu poate citi cookie-ul (Same-origin policy), nu va putea falsifica token-ul. Metoda este mai ușor de implementat decât sincronizatorul, dar necesită HTTPS pentru a proteja cookie-ul de interceptare.

  • Token-uri CSRF — standardul de aur: fiabile, testate în timp, suportate de toate framework-urile
  • SameSite=Lax — protecție minimă pentru aplicații web: gratuită, automată, fără a necesita cod
  • Verificarea Origin — nivel suplimentar: blochează atacurile înainte de verificarea token-ului
  • Double Submit — pentru REST API fără sesiuni server-side: eficient pe HTTPS
  • Header-e personalizate — X-Requested-With: XMLHttpRequest blochează formularele CSRF simple

Diferența dintre CSRF și XSS

CSRF și XSS sunt tipuri diferite de atacuri care sunt adesea confundate. CSRF exploatează încrederea serverului în browserul utilizatorului: serverul execută comanda atacatorului deoarece cererea vine cu cookie-uri valide. XSS exploatează încrederea browserului în conținutul serverului: browserul execută scriptul injectat de atacator în pagină. CSRF nu necesită injectarea de cod pe site-țintă — este suficient să trimiți o cerere de pe un alt domeniu. XSS, dimpotrivă, necesită găsirea unei modalități de a injecta propriul JavaScript în codul HTML al paginii. În plus, XSS poate ocoli protecția CSRF: scriptul injectat citește token-ul CSRF din pagină și îl trimite împreună cu cererea.

CaracteristicăCSRFXSS
Țintă ataculuiServerClient (browser)
VectorFalsificarea cereriiInjectarea scriptului
Este necesar JavaScript pe site-ul victimei?NuDa
Furt de dateNu (doar acțiuni)Da
ProtecțieToken CSRF, SameSite, OriginEscape la ieșire, CSP

Înțelegerea diferenței dintre CSRF și XSS este critică pentru construirea unei protecții multinivel. Token-urile CSRF nu protejează împotriva XSS, iar CSP (Content Security Policy) nu protejează împotriva CSRF. Doar combinarea metodelor asigură securitatea aplicației împotriva ambelor tipuri de atacuri. în aplicațiile mobile cu WebView riscurile se dublează, de aceea dezvoltatorilor li se recomandă să aplice cel puțin token-uri CSRF pentru cererile API și Content Security Policy pentru conținutul web.

întrebări frecvente

Cu ce se deosebește CSRF de scriptingul intersite?

CSRF forțează serverul să execute o acțiune în numele utilizatorului, iar XSS injectează un script malefic în browserul victimei. CSRF nu necesită injectarea de cod pe site-țintă — este suficient să trimiți o cerere de pe un alt domeniu. XSS, spre deosebire de CSRF, poate fura date și citi conținutul paginii.

Cum să știu dacă aplicația mea este vulnerabilă la CSRF?

Verificați dacă folosiți autentificare prin cookie și dacă există verificarea originii cererii pentru operațiile de schimbare a stării. Dacă API-ul acceptă POST/PUT/DELETE fără token CSRF, verificare Origin sau SameSite — aplicația este vulnerabilă. Folosiți OWASP ZAP sau Burp Suite pentru scanare automată.

Protejează CORS împotriva CSRF?

Nu, CORS nu protejează împotriva CSRF. CORS este un mecanism pentru citirea sigură a răspunsurilor cross-domain, iar atacurile CSRF nu necesită citirea răspunsului — le este suficient să trimită cererea. Cererile CSRF prin <form> sau <img> nu sunt supuse restricțiilor CORS.

Este necesară protecția CSRF pentru REST API-ul unei aplicații mobile?

Dacă API-ul folosește autentificare prin cookie — da, protecția CSRF este obligatorie. Dacă API-ul funcționează cu token-uri Bearer în header-ul Authorization, riscul CSRF este minim, deoarece token-urile nu sunt trimise automat de browser. Totuși, pentru aplicațiile hibride cu WebView, protecția este încă recomandată.

Ce să fac dacă SameSite nu este suportat de browser?

SameSite este suportat de toate browserele moderne din 2020. Pentru browserele vechi, folosiți token-uri CSRF ca metodă principală de protecție. Combinația token CSRF + SameSite asigură protecție maximă chiar și cu SameSite dezactivat în browserele mai vechi.

Concluzii

  • CSRF — un atac de falsificare a cererii intersite care exploatează încrederea serverului în browserul utilizatorului autentificat
  • Mecanismul atacului — browserul trimite automat cookie-urile cu cererea, serverul nu deosebește cererea legitimă de cea falsificată
  • Tipuri principale — GET-based (prin <img>), POST-based (prin formular ascuns), XHR-based (prin CORS)
  • Specificul mobil — WebView și autentificarea prin cookie în aplicațiile hibride creează riscuri CSRF
  • Token-uri CSRF — cea mai sigură metodă de protecție, suportată de toate framework-urile
  • SameSite=Lax — protecție automată la nivel de browser, activată implicit
  • Protecție combinată — token-uri + SameSite + verificare Origin asigură protecție împotriva a 99% din atacurile CSRF

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și