In diesem Blog beschreiben wir einige einfache Sicherheitsfehler und wie man sie behebt.
Inhalt ausblenden
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
undBootstrap/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.phpgeschü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
(oderargon2
für stärkere Sicherheit) zum Hashen von Passwörtern:phpverwenden 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!