CSRF (Cross-Site Request Forgery) โ foydalanuvchi nomidan saytda harakat qildirish. Misol: bank saytida 'login' qilingansiz, begona sayt sizning bankka 'pul o'tkaz' so'rovi yuboradi.
Hujum mexanizmi
1) Siz bank.uz'ga login qilgansiz, cookies bor. 2) hacker.com saytiga kiryapsiz. 3) hacker.com da yashirin form bank.uz/transfer'ga POST so'rov yuboradi. 4) Brauzer cookielaringizni avtomatik qo'shadi โ bank sizni vakolatli ko'radi.
Himoya: CSRF token
Har formada yashirin maydon: <input type='hidden' name='csrf_token' value='RANDOM_STRING'>. Server token to'g'ri ekanini tekshiradi.
Token yaratish
PHP: $_SESSION['csrf'] = bin2hex(random_bytes(32)). Har sessiya alohida. Token ses bilan tasdiqlanadi โ boshqa saytdan kelmaydi.
SameSite cookies
Set-Cookie: session=...; SameSite=Strict. Cookie faqat o'sha saytdan kelgan so'rovda yuboriladi. Modern brauzerlar Lax/Strict default.
Double Submit Cookie
Token cookie va form maydonida bir xil bo'lsin. Server ikkalasini taqqoslaydi.
Custom header
AJAX so'rovlar uchun: X-CSRF-Token header. Boshqa sayt header yubora olmaydi (preflight).
Framework
Laravel @csrf, Symfony FormType, Express csurf middleware. Eng yaxshi โ framework'ning ichki mexanizmi.
Test
Browser DevTools'da forma submit qiling, csrf_token o'zgartirib โ 403 chiqishi kerak.