Logo di sicurezza

Laravel Security Best Practices – Un elenco di suggerimenti per la codifica

In questo blog descriviamo alcuni semplici errori di sicurezza e come risolverli.

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 E bootstrap/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.php
    protetto $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 compositoree 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 (O Argon2 per una maggiore sicurezza) per l'hashing delle password:php
    utilizzare 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!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

it_ITItaliano
Scorri verso l'alto