Sicherheitslogo

Best Practices für die Sicherheit in Laravel – Eine Liste mit Tipps zum Codieren

In diesem Blog beschreiben wir einige einfache Sicherheitsfehler und wie man sie behebt.

1. Kein HTTPS verwenden

  • Fehler: Wenn Sie Ihre Laravel-Anwendung über HTTP statt über HTTPS bereitstellen, ist sie anfällig für Man-in-the-Middle-Angriffe (MITM), bei denen vertrauliche Daten abgefangen werden können.
  • Lösung: Verwenden Sie in Produktionsumgebungen immer HTTPS, indem Sie SSL-Zertifikate einrichten und HTTPS erzwingen, indem Sie dies zu ($this->app->environment('production')) { \URL::forceScheme('https'); } hinzufügen.

2. Verwenden schwacher Verschlüsselungsschlüssel

  • Fehler: Fehlende Festlegung einer starken APP_KEY im .env Datei, die für die Verschlüsselung, Sitzungssicherheit und das Passwort-Hashing von entscheidender Bedeutung ist.
  • Lösung: Legen Sie mit dem folgenden Befehl einen starken Anwendungsschlüssel fest:bash
    PHP Artisan-Schlüssel: Generieren Stellen Sie sicher, dass dieser Schlüssel geheim bleibt und niemals öffentlich weitergegeben wird.

3. Keine Validierung der Eingabedaten

  • Fehler: Durch das Überspringen der Eingabevalidierung kann Ihre Anwendung verschiedenen Angriffen ausgesetzt sein, beispielsweise SQL-Injection, Cross-Site-Scripting (XSS) und anderen Schwachstellen.
  • Lösung: Verwenden Sie die integrierte Validierung von Laravel, um sicherzustellen, dass alle Eingabedaten bereinigt sind und dem erwarteten format.php entsprechen.
    $request->validate([ 'E-Mail' => 'erforderlich|E-Mail', 'Passwort' => 'erforderlich|min:8', ]);

4. Speichern vertraulicher Daten in der Codebasis

  • Fehler: Die Festcodierung vertraulicher Daten wie API-Schlüssel, Datenbankanmeldeinformationen oder privater Token direkt in der Codebasis kann zu Sicherheitsverletzungen führen, wenn der Code weitergegeben oder offengelegt wird.
  • Lösung: Speichern Sie vertrauliche Informationen in Umgebungsvariablen (.env) und verwenden Sie das Konfigurationssystem von Laravel, um sie zu laden. Übernehmen Sie niemals die .env Datei zur Versionskontrolle.

5. Unsachgemäße Dateiberechtigungen

  • Fehler: Erlauben von Schreibberechtigungen für sensible Dateien, wie z. B. .env Datei kann dazu führen, dass nicht autorisierte Benutzer Zugriff auf Konfigurationsdaten erhalten.
  • Lösung: Legen Sie die richtigen Dateiberechtigungen für Ihr Laravel-Projekt fest. Im Allgemeinen möchten Sie Verzeichnisse wie Lagerung und Bootstrap/Cache vom Webserver beschreibbar sein, andere Dateien sollten jedoch nicht beschreibbar sein.

6. Benutzergenerierten Inhalten nicht entkommen

  • Fehler: Wenn benutzergenerierte Daten nicht maskiert werden, bevor sie auf der Seite gerendert werden, kann dies zu XSS-Angriffen führen.
  • Lösung: Verwenden Sie Blade, die in Laravel integrierte Template-Engine, die die Ausgabe automatisch maskiert. Wenn Sie die Maskierung deaktivieren müssen (was selten vorkommt), stellen Sie sicher, dass der Inhalt ordnungsgemäß bereinigt ist.
{{ $userInput }} // Entkommen
{!! $userInput !!} // Nicht maskiert (Seien Sie vorsichtig)

7. Keine Begrenzung der Massenzuweisung

  • Fehler: Wenn Massenzuweisungen bei Modellen zugelassen werden, ohne ordnungsgemäß zu kontrollieren, welche Felder ausfüllbar sind, kann es Angreifern passieren, dass sie unbeabsichtigte Felder ändern.
  • Lösung: Verwenden Sie die $ausfüllbar oder $bewacht Eigenschaften in Ihren Eloquent-Modellen, um anzugeben, welche Felder massenweise zugewiesen werden können.php
    geschützt $fillable = ['Name', 'E-Mail'];

8. Verfügbarmachen des Debug-Modus in der Produktion

  • Fehler: Verlassen APP_DEBUG=true im .env Dateien in Produktionsumgebungen können vertrauliche Informationen wie Stapeltraces, Datenbankanmeldeinformationen und API-Schlüssel in Fehlermeldungen offenlegen.
  • Lösung: Immer eingestellt APP_DEBUG=false in der Produktion, und erwägen Sie die Verwendung einer Fehlerprotokollierung, um Fehler zu erfassen und sicher zu speichern, ohne sie öffentlich preiszugeben.

9. Unsichere Handhabung des Datei-Uploads

  • Fehler: Eine unsachgemäße Validierung und Bereinigung hochgeladener Dateien kann zu schädlichen Datei-Uploads führen, die serverseitigen Code ausführen können.
  • Lösung: Verwenden Sie die Validierungsregeln für den Dateiupload von Laravel, um Typ, Größe und andere Attribute hochgeladener Dateien zu überprüfen.php
    $request->validate([ 'file' => 'erforderlich|Datei|mimes:jpg,png,pdf|max:2048', ]);

Speichern Sie die Dateien außerhalb des öffentlichen Verzeichnisses und verwenden Sie sichere Methoden, um darauf zuzugreifen.

10. Fehler bei der Implementierung einer Ratenbegrenzung

  • Fehler: Wenn Sie auf sensiblen Routen wie Anmelde- oder API-Endpunkten keine Ratenbegrenzung implementieren, kann Ihre Anwendung Brute-Force-Angriffen oder Denial-of-Service-Angriffen (DoS) ausgesetzt sein.
  • Lösung: Verwenden Sie die integrierte Rate-Limiting-Middleware von Laravel, um Ihre Routes.php zu schützen.
    Route::middleware('throttle:10,1')->Gruppe(Funktion () { Route::post('/login', 'AuthController@login'); });

11. Unnötige Offenlegung sensibler Endpunkte

  • Fehler: Das Verlassen sensibler Routen wie /Teleskop/Horizont, oder /Administrator öffentlich zugängliche Elemente können wertvolle Debugging- oder Verwaltungstools enthalten.
  • Lösung: Schützen Sie diese Routen, indem Sie den Zugriff über Middleware oder IP-Whitelists einschränken. Beschränken Sie beispielsweise den Zugriff auf Laravel Telescope auf lokale Umgebungen:php
    wenn (app()->Umgebung('lokal')) { Teleskop::auth(Funktion () { return true; }); }

12. Veraltetes Laravel und Abhängigkeiten

  • Fehler: Das Ausführen veralteter Versionen von Laravel oder seiner Abhängigkeiten kann dazu führen, dass bekannte Schwachstellen ungepatcht bleiben.
  • Lösung: Aktualisieren Sie Laravel und seine Abhängigkeiten regelmäßig, indem Sie Komponisten-Update, und überwachen Sie Sicherheitshinweise für die von Ihnen verwendeten Pakete.

13. Kein CSRF-Schutz verwenden

  • Fehler: Wenn kein Cross-Site Request Forgery (CSRF)-Schutz implementiert wird, können Angreifer Benutzer möglicherweise dazu verleiten, in ihrem Namen Aktionen auszuführen.
  • Lösung: Laravel beinhaltet standardmäßig CSRF-Schutz für alle POST-, PUT-, PATCH- und DELETE-Anfragen mit dem @csrf Direktive in forms.blade
    @csrf

14. Kein sicheres Passwort-Hashing verwenden

  • Fehler: Das Speichern von Passwörtern im Klartext oder die Verwendung schwacher Hashing-Algorithmen macht Ihre Anwendung anfällig, wenn die Datenbank kompromittiert wird.
  • Lösung: Verwenden Sie immer Laravels bcrypt (oder argon2 für stärkere Sicherheit) zum Hashen von Passwörtern:php
    verwenden Sie Illuminate\Support\Facades\Hash; $hashedPassword = Hash::make($password);

15. Ignorieren von Protokollen und Warnungen

  • Fehler: Wenn Anwendungsprotokolle nicht auf verdächtige Aktivitäten oder Fehler überwacht werden, kann es dazu kommen, dass Sicherheitsvorfälle übersehen werden.
  • Lösung: Überprüfen Sie regelmäßig die Laravel-Protokolle (Speicher/Protokolle) und richten Sie Warnungen für kritische Ereignisse ein. Sie können Laravel mit Überwachungstools von Drittanbietern wie Sentry oder New Relic für die Echtzeitüberwachung integrieren.

16. Aktualisierung mit $request->all()

Etwas ähnlich wie Punkt 7.

Allerdings scheint es wirklich praktisch zu sein, wenn Sie einen Benutzer wie folgt aktualisieren:

$user->update($request->all());

Es besteht ein Sicherheitsrisiko. Wenn Sie beispielsweise eine Spalte this_is_an_admin=1 haben, kann ein Benutzer diese Variable über die Entwicklerkonsole des Browsers festlegen.

Es wäre besser, nur die richtige $request-Variable zu filtern mit:

$request->only(['name', 'newsletter_subscribed']);

Haben Sie noch weitere Sicherheitsfragen? Lassen Sie es uns in den Kommentaren wissen!

Einen Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch
Nach oben blättern