In questo blog descriviamo alcuni semplici errori di sicurezza e come risolverli.
Contenuto nascondere
1. Non utilizzare HTTPS
- Errore:Se utilizzi l'applicazione Laravel tramite HTTP anziché HTTPS, la rendi vulnerabile ad attacchi man-in-the-middle (MITM), tramite i quali i dati sensibili possono essere intercettati.
- Soluzione: Utilizza sempre HTTPS negli ambienti di produzione impostando i certificati SSL e forzando HTTPS aggiungendo questo a the($this->app->environment('production')) { \URL::forceScheme('https'); }
2. Utilizzo di chiavi di crittografia deboli
- Errore: Non riuscire a stabilire un forte
CHIAVE APP
nel.ambiente
file, che è fondamentale per la crittografia, la sicurezza della sessione e l'hashing delle password. - Soluzione: Imposta una chiave di applicazione forte utilizzando il seguente comando: bash
chiave php artisan:genera
Assicuratevi che questa chiave rimanga segreta e non venga mai condivisa pubblicamente.
3. Non convalidare i dati di input
- Errore: Saltare la convalida dell'input può esporre l'applicazione a vari attacchi, come SQL injection, cross-site scripting (XSS) e altre vulnerabilità.
- Soluzione: Utilizza la convalida integrata di Laravel per garantire che tutti i dati di input siano sanificati e seguano il formato previsto.php
$request->validate([ 'email' => 'obbligatorio|email', 'password' => 'obbligatorio|min:8', ]);
4. Memorizzazione di dati sensibili nel codice base
- Errore: La codifica hardcoded di dati sensibili quali chiavi API, credenziali di database o token privati direttamente nel codice base può portare a violazioni della sicurezza se il codice viene condiviso o esposto.
- Soluzione: Memorizza informazioni sensibili nelle variabili di ambiente (
.ambiente
) e usa il sistema di configurazione di Laravel per caricarli. Non eseguire mai il commit.ambiente
file per il controllo della versione.
5. Autorizzazioni file non corrette
- Errore: Consentire permessi di scrittura su file sensibili, come ad esempio
.ambiente
file, può consentire a utenti non autorizzati di accedere ai dati di configurazione. - Soluzione: Imposta i permessi file appropriati per il tuo progetto Laravel. In genere, vuoi directory come
magazzinaggio
Ebootstrap/cache
essere scrivibile dal server web, ma gli altri file non dovrebbero esserlo.
6. Non sfuggire ai contenuti generati dagli utenti
- Errore: Non riuscire a eseguire l'escape dei dati generati dall'utente prima di visualizzarli sulla pagina può portare ad attacchi XSS.
- Soluzione: Usa il motore di template integrato di Laravel, Blade, che esegue automaticamente l'escape dell'output. Se devi disabilitare l'escape (il che è raro), assicurati che il contenuto sia opportunamente sanificato.
{{ $userInput }} // Escaped
{!! $userInput !!} // Non sottoposto a escape (fai attenzione)
7. Assegnazione di massa non limitante
- Errore: Consentire l'assegnazione di massa sui modelli senza controllare adeguatamente quali campi sono compilabili può consentire agli aggressori di modificare campi indesiderati.
- Soluzione: Utilizzare il
$riempibile
O$protetto
proprietà nei tuoi modelli Eloquent per specificare quali campi possono essere assegnati in massa.phpprotetto $fillable = ['nome', 'email'];
8. Esposizione della modalità di debug in produzione
- Errore: In partenza
APP_DEBUG=vero
nel.ambiente
I file negli ambienti di produzione possono esporre informazioni sensibili come stack trace, credenziali del database e chiavi API nei messaggi di errore. - Soluzione: Imposta sempre
APP_DEBUG=falso
in produzione e valutare l'utilizzo della registrazione degli errori per catturare e archiviare in modo sicuro gli errori senza rivelarli pubblicamente.
9. Gestione non sicura del caricamento dei file
- Errore: La mancata convalida e sanificazione dei file caricati può portare a caricamenti di file dannosi, in grado di eseguire codice lato server.
- Soluzione: Utilizza le regole di convalida del caricamento dei file di Laravel per controllare il tipo, la dimensione e altri attributi dei file caricati.php
$request->validate([ 'file' => 'obbligatorio|file|mimes:jpg,png,pdf|max:2048', ]);
Conservare i file al di fuori della directory pubblica e utilizzare metodi sicuri per accedervi.
10. Mancata implementazione della limitazione della velocità
- Errore: La mancata implementazione della limitazione della velocità su percorsi sensibili come endpoint di accesso o API può esporre l'applicazione ad attacchi brute force o attacchi denial-of-service (DoS).
- Soluzione: Utilizza il middleware di limitazione della velocità integrato di Laravel per proteggere i tuoi percorsi.php
Route::middleware('throttle:10,1')->group(function () { Route::post('/login', 'AuthController@login'); });
11. Esposizione non necessaria di endpoint sensibili
- Errore: Lasciare percorsi sensibili come
/telescopio
,/orizzonte
, O/amministratore
accessibili al pubblico possono esporre preziosi strumenti di debug o amministrativi. - Soluzione: Proteggi queste rotte limitando l'accesso tramite middleware o IP whitelisting. Ad esempio, limita l'accesso a Laravel Telescope agli ambienti locali:php
se (app()->environment('local')) { Telescope::auth(function () { restituisce true; }); }
12. Laravel obsoleto e dipendenze
- Errore: L'esecuzione di versioni obsolete di Laravel o delle sue dipendenze può lasciare vulnerabilità note non corrette.
- Soluzione: Aggiorna regolarmente Laravel e le sue dipendenze eseguendo
aggiornamento del compositore
e monitora gli avvisi di sicurezza per i pacchetti che utilizzi.
13. Non si utilizza la protezione CSRF
- Errore: La mancata implementazione della protezione contro la falsificazione delle richieste tra siti (CSRF) può consentire agli aggressori di indurre gli utenti a eseguire azioni per loro conto.
- Soluzione: Laravel include la protezione CSRF per impostazione predefinita per tutte le richieste POST, PUT, PATCH e DELETE utilizzando
@csrf
direttiva in forms.blade@csrf
14. Non utilizzare l'hashing sicuro delle password
- Errore: Memorizzare le password in testo normale o utilizzare algoritmi di hashing deboli rende l'applicazione vulnerabile in caso di compromissione del database.
- Soluzione: Usa sempre Laravel
Criptare
(OArgon2
per una maggiore sicurezza) per l'hashing delle password:phputilizzare Illuminate\Support\Facades\Hash; $hashedPassword = Hash::make($password);
15. Ignorare i registri e gli avvisi
- Errore: Il mancato monitoraggio dei registri delle applicazioni per individuare attività sospette o errori può portare a incidenti di sicurezza non rilevati.
- Soluzione: Controlla regolarmente i log di Laravel (
archiviazione/registri
) e impostare avvisi per eventi critici. Puoi integrare Laravel con strumenti di monitoraggio di terze parti come Sentry o New Relic per il monitoraggio in tempo reale.
16. Aggiornamento con $request->all()
Un po' simile al punto 7.
Sebbene sembri davvero comodo, quando aggiorni un utente in questo modo:
$user->update($request->all());
C'è un rischio per la sicurezza. Ad esempio, se hai una colonna this_is_an_admin=1, un utente può impostare questa variabile tramite la Developer Console del browser.
Sarebbe meglio filtrare solo la variabile $request corretta con:
$request->only(['nome', 'iscritto_alla_newsletter']);
Hai altri punti di sicurezza? Faccelo sapere nei commenti!