Framework-ul vine cu multe protecții implicite, dar ele nu înlocuiesc deciziile de design: ce câmpuri salvezi din request, ce randezi neescapat în HTML, ce expui în API. Secțiunea de față enumeră vectori comuni și măsuri proportionale, fără alarmism și fără checklist-uri copiate fără context. Securitatea utilă reduce suprafața de atac acolo unde datele utilizatorilor circulă efectiv.
Validarea pe server e obligatorie chiar dacă există JS pe client. Folosește `$fillable` sau `$guarded` conștient; `create($request->all())` rămâne periculos. La afișare, Blade escapează implicit cu `{{ }}`; `{!! !!}` doar pentru conținut sanitizat explicit. Upload-urile verifică MIME și extensie, stochează în afara executabilului web dacă e posibil. Rate limit pe endpoint-uri de creare cont și postare limitează spam-ul automatizat fără a bloca utilizatori legitimi prin CAPTCHA peste tot.
Parolele hash-uite cu algoritm modern; reset token cu expirare scurtă. Regenerarea session id la login reduce fixarea sesiunii. Cookie `secure` și `httpOnly` pe HTTPS. Politici de autorizare (Gates/Policies) centralizează cine poate edita un post — nu repeta `user_id === auth()->id()` în cinci locuri divergente. Confirmarea parolei la acțiuni sensibile (schimbare email) adaugă un strat simplu împotriva sesiunii hijacked.
HSTS, X-Frame-Options sau CSP pot fi setate la middleware sau la nivel web server. `APP_DEBUG` false în producție — stack trace-ul expune path-uri și versiuni. Dezactivează listing-ul de directoare și blochează accesul la fișiere sensibile prin reguli server unde nu controlezi tot codul legacy. Content-Security-Policy începe restrictiv pe script-src și se relaxează controlat, nu invers — altfel blochezi funcționalitate legitimă fără să închizi XSS.
Rulează audit periodic pe pachetele Composer; vulnerabilitățile raportate cer upgrade planificat, nu ignorare. Cheile API se rotesc când există suspiciune de scurgere. Loghează tentative eșuate de login fără a stoca parola introdusă. Principle of least privilege pentru contul DB al aplicației — nu folosi root MySQL în `.env`. Separarea mediilor (credențiale distincte) previne ca un test greșit să șteargă date reale.
Input și ieșire
Validarea pe server e obligatorie chiar dacă există JS pe client. Folosește `$fillable` sau `$guarded` conștient; `create($request->all())` rămâne periculos. La afișare, Blade escapează implicit cu `{{ }}`; `{!! !!}` doar pentru conținut sanitizat explicit. Upload-urile verifică MIME și extensie, stochează în afara executabilului web dacă e posibil. Rate limit pe endpoint-uri de creare cont și postare limitează spam-ul automatizat fără a bloca utilizatori legitimi prin CAPTCHA peste tot.
Autentificare și sesiune
Parolele hash-uite cu algoritm modern; reset token cu expirare scurtă. Regenerarea session id la login reduce fixarea sesiunii. Cookie `secure` și `httpOnly` pe HTTPS. Politici de autorizare (Gates/Policies) centralizează cine poate edita un post — nu repeta `user_id === auth()->id()` în cinci locuri divergente. Confirmarea parolei la acțiuni sensibile (schimbare email) adaugă un strat simplu împotriva sesiunii hijacked.
Headers și configurare server
HSTS, X-Frame-Options sau CSP pot fi setate la middleware sau la nivel web server. `APP_DEBUG` false în producție — stack trace-ul expune path-uri și versiuni. Dezactivează listing-ul de directoare și blochează accesul la fișiere sensibile prin reguli server unde nu controlezi tot codul legacy. Content-Security-Policy începe restrictiv pe script-src și se relaxează controlat, nu invers — altfel blochezi funcționalitate legitimă fără să închizi XSS.
Dependențe și rotație
Rulează audit periodic pe pachetele Composer; vulnerabilitățile raportate cer upgrade planificat, nu ignorare. Cheile API se rotesc când există suspiciune de scurgere. Loghează tentative eșuate de login fără a stoca parola introdusă. Principle of least privilege pentru contul DB al aplicației — nu folosi root MySQL în `.env`. Separarea mediilor (credențiale distincte) previne ca un test greșit să șteargă date reale.