Skip to main content

So verhindern Sie Open-Redirect-Schwachstellen in Laravel

Artikel von
Headshot of Kevin Kimani

Kevin Kimani

feature laravel open redirect

27. Dezember 2023

0 Min. Lesezeit

Eine Open-Redirect-Schwachstelle entsteht, wenn eine Website zulässt, dass vom Benutzer bereitgestellte Eingaben das Ziel einer Weiterleitung beeinflussen, ohne die erforderlichen Validierungs- oder Bereinigungsmaßnahmen umzusetzen. Um diese Schwachstelle auszunutzen, kann ein Angreifer Benutzern einen scheinbar vertrauenswürdigen Link senden, der sie nach dem Anklicken auf eine schädliche Website weiterleitet. Dies kann zu Phishing-Angriffen oder anderen böswilligen Aktivitäten führen. In Laravel tritt dies häufig auf, wenn Entwickler Weiterleitungsziele nicht validieren oder auf eine Allowlist setzen.

In diesem Artikel erfahren Sie mehr über Open-Redirect-Schwachstellen und wie Sie diese in Laravel verhindern können. Außerdem erfahren Sie, wie Sie mit Snyk diese Schwachstelle in Ihrem Code und Ihren Abhängigkeiten erkennen.

Was ist eine Open-Redirect-Schwachstelle in Laravel?

Open-Redirect-Schwachstellen treten auf, wenn Webanwendungen externen Benutzern erlauben, eine URL festzulegen, zu der sie weitergeleitet werden. Dies geschieht häufig nach einer vom Benutzer ausgelösten Aktion, etwa dem Anklicken eines Links oder einer Schaltfläche. Diese vom Benutzer angegebene URL ist üblicherweise als Abfrageparameter in der URL der Anwendung enthalten.

Sehen Sie sich beispielsweise eine anfällige URL wie diese an: http://example.com/redirect?url=http://malicious-site.com

Ohne geeignete Validierungs- und Bereinigungsmaßnahmen kann die Laravel-Weiterleitungsmethode Benutzer versehentlich an die angegebene schädliche Website weiterleiten.

Erstellen einer anfälligen Anwendung

Um besser zu verstehen, wie eine Open-Redirect-Schwachstelle funktioniert, erstellen wir eine einfache anfällige Anwendung. Anschließend implementieren Sie Methoden, um diese Schwachstelle zu verhindern.

Für die Anleitung benötigen Sie Folgendes:

  • PHP und Composer, installiert auf Ihrem lokalen Rechner.

  • Die Erweiterungen php-xml und php-curl, installiert auf Ihrem lokalen Rechner.

  • Node.js und npm, installiert auf Ihrem lokalen Rechner.

  • Einen Webbrowser und einen Code-Editor. In dieser Anleitung verwenden wir Visual Studio (VS) Code.

Der gesamte Code für dieses Tutorial ist in diesem GitHub-Repository verfügbar.

Sobald alles bereit ist, können Sie mit der Erstellung der Anwendung beginnen.

Wechseln Sie auf Ihrem lokalen Rechner in ein geeignetes Verzeichnis, öffnen Sie den Ordner in einem Terminal und führen Sie die folgenden Befehle aus, um das Laravel-Installationsprogramm global über Composer zu installieren und ein neues Laravel-Projekt zu erstellen:

composer global require laravel/installer

laravel new open-redirect-vulnerability-demo

Falls dieser Befehl nicht funktioniert, erstellen Sie mit composer create-project laravel/laravel open-redirect-vulnerability-demo ein neues Projekt.

Wählen Sie in den angezeigten Terminal-Eingabeaufforderungen die folgenden Optionen aus:

  • Möchten Sie ein Starter-Kit installieren?: Kein Starter-Kit

  • Welches Test-Framework bevorzugen Sie?: PHPUnit

  • Möchten Sie ein Git-Repository initialisieren?: Nein

  • Welche Datenbank wird Ihre Anwendung verwenden?: SQLite

Nachdem Sie die Anwendung erstellt haben, öffnen Sie das Verzeichnis open-redirect-vulnerability-demo in Ihrem Code-Editor. Um anschließend eine Route mit einer Open-Redirect-Schwachstelle zu erstellen, öffnen Sie die Datei routes/web.php und ersetzen Sie die Route / durch den folgenden Code:

Route::get('/vulnerable', function (Request $request) {
   // Get the 'redirect' parameter from the query string
   $redirectUrl = $request->input('redirect');

   // Perform the redirect
   return redirect($redirectUrl);
});

Vergewissern Sie sich, dass die folgende use-Anweisung am Anfang der Datei web.php steht:

use Illuminate\Http\Request;

Um zu veranschaulichen, wie die Open-Redirect-Schwachstelle funktioniert, starten Sie den Server mit dem Befehl php artisan serve und öffnen Sie Ihren Webbrowser. In diesem Szenario ist https://www.google.com/ die schädliche URL, zu der ein Angreifer den Benutzer weiterleiten möchte.

Rufen Sie im Browser http://127.0.0.1:8000/vulnerable?redirect=https://www.google.com/ auf. Sie werden dann zu https://www.google.com/ weitergeleitet.

Die von Ihnen erstellte Route /vulnerable ist aufgrund fehlender Eingabevalidierung und -bereinigung anfällig für eine Open-Redirect-Schwachstelle. Konkret ruft sie den Weiterleitungsparameter aus der URL ab und leitet zur angegebenen Webseite weiter, ohne zu überprüfen, ob die URL sicher ist oder zur Domain der Anwendung gehört. Da der Code Benutzer blind an die im Weiterleitungsparameter angegebene URL weiterleitet, lässt sich die URL manipulieren, um Benutzer dazu zu verleiten, Phishing-Websites zu besuchen, Malware herunterzuladen oder sich an anderen schädlichen Aktivitäten zu beteiligen.

In diesem Fall hätte der Angreifer eine Kopie der echten Website erstellen können (d. h. http://127.0.0.1:8000). Wenn die Seite geladen wird, könnte der Benutzer denken, er befinde sich auf der richtigen Website, obwohl das nicht der Fall ist. Meldet sich der Benutzer auf der schädlichen Website an, gibt er seine Zugangsdaten unwissentlich an den Angreifer weiter.

So verhindern Sie eine Open-Redirect-Schwachstelle in Laravel

Open-Redirect-Schwachstellen sind ein häufig genutzter Angriffsvektor, der sich verhindern lässt. Die folgenden Best Practices können dabei helfen:

Feste Weiterleitungen verwenden

Mit festen Weiterleitungen stellen Sie sicher, dass Benutzer nur zu vertrauenswürdigen, vorab festgelegten Zielen innerhalb der Anwendung weitergeleitet werden können. Diese Vorgehensweise mindert das Risiko von Open-Redirect-Schwachstellen wirksam und bietet einen robusten Schutz, der implementiert werden sollte.

Um feste Weiterleitungen im aktuellen Code zu implementieren, ersetzen Sie die Route /vulnerable durch Folgendes:

Route::get('/', function () {
   return view('welcome');
})->name('home');

Route::get('/vulnerable', function (Request $request) {
   return redirect()->route('home');
});

Mit diesem Code beschränken Sie alle Weiterleitungen auf bestimmte, vertrauenswürdige Routen (d. h. interne Routen) innerhalb Ihrer Laravel-Anwendung. So verhindern Sie, dass Angreifer schädliche URLs erstellen, die zu externen Zielen führen. Sie können die Korrektur testen, indem Sie versuchen, die zuvor verwendete schädliche URL aufzurufen: http://127.0.0.1:8000/vulnerable?redirect=https://www.google.com/.

Eine Allowlist möglicher Weiterleitungen

Eine weitere Möglichkeit, Open-Redirect-Schwachstellen zu verhindern, besteht darin, eine Liste vertrauenswürdiger Ziele festzulegen. Diese Vorsichtsmaßnahme trägt dazu bei, dass Weiterleitungen nur zu zugelassenen URLs erfolgen.

Um diese Strategie in diesem Laravel-Projekt umzusetzen, ersetzen Sie die Route /vulnerable durch den folgenden Code:

Route::get('/vulnerable', function (Request $request) {
   // Define trusted redirect destinations
   $whitelistedDestinations = [
   	'https://snyk.io/',
   ];

   // Get the 'redirect' parameter from the params
   $redirectUrl = $request->input('redirect');

   // Check if the input URL is in the whitelist
   if (in_array($redirectUrl, $whitelistedDestinations)) {
   	// Perform the redirect
   	return redirect($redirectUrl);
   }

   // Handle invalid redirects, for example:
   return redirect('/'); // Redirect to a safe default page
});

In diesem Code gehen Sie davon aus, dass https://snyk.io/ eine vertrauenswürdige Weiterleitungs-URL ist. Der Wert des Weiterleitungsparameters in der URL wird mit dem Array $whitelistedDestinations abgeglichen. Stimmt er mit einem der vertrauenswürdigen Ziele überein, erfolgt die Weiterleitung. Andernfalls leitet die Anwendung auf eine sichere Standardseite weiter.

Um diese Methode zu testen, rufen Sie in Ihrem Browser http://127.0.0.1:8000/vulnerable?redirect=https://www.google.com auf. Sie werden automatisch zur Startseite der Laravel-Anwendung weitergeleitet, da https://www.google.com nicht im Array $whitelistedDestinations enthalten ist. Rufen Sie hingegen http://127.0.0.1:8000/vulnerable?redirect=https://snyk.io/ auf, werden Sie zu https://snyk.io/ weitergeleitet, da diese URL im Array $whitelistedDestinations enthalten ist.

Weiterleitungen zu anderen Domains unterbinden

Wenn Ihre Anwendung keine Weiterleitungen zu anderen Domains zulässt, werden Benutzer ausschließlich innerhalb der Anwendungsdomain weitergeleitet. Alternativ können sie angemessen informiert werden und bei möglichen Weiterleitungen außerhalb der vertrauenswürdigen Umgebung Vorsicht walten lassen. Diese Vorgehensweise stärkt die allgemeine Sicherheit und das Vertrauen der Benutzer.

Um diese Strategie in diesem Laravel-Projekt umzusetzen, ersetzen Sie die Route /vulnerable durch den folgenden Code:

Route::get('/vulnerable', function (Request $request) {
   $inputUrl = $request->input('redirect');

   // Prepend the protocol if missing
   if (!parse_url($inputUrl, PHP_URL_SCHEME)) {
   	$inputUrl = 'http://' . $inputUrl;
   }

   $parsedInputUrl = parse_url($inputUrl);

   // Check if the URL is valid and has a host component
   if ($parsedInputUrl && array_key_exists('host', $parsedInputUrl) && $parsedInputUrl['host'] === 'localhost') {
   	return redirect()->to($inputUrl);
   }

   // Disallow redirect with a 403 Forbidden status code
   return response('Forbidden: Cannot redirect to another domain', Response::HTTP_FORBIDDEN);
});

Fügen Sie außerdem die folgende use-Anweisung am Anfang der Datei web.php ein:

use Illuminate\Http\Response;

Dieser Code definiert eine Route, die Benutzereingaben in Form einer URL entgegennimmt. Fehlt das Protokoll, wird http:// vorangestellt. Anschließend wird überprüft, ob der Host der URL localhost ist. Ist das der Fall, lässt der Code die Weiterleitung zu. Andernfalls gibt er eine Antwort 403 Forbidden zurück, unterbindet die Weiterleitung zu einer anderen Domain und weist mit einer Meldung darauf hin, dass die Weiterleitung zu einer anderen Domain nicht zulässig ist.

Open-Redirect-Schwachstellen mit einer Snyk-IDE-Erweiterung erkennen

Wenn Sie nach einer nahtlosen Lösung suchen, um Open-Redirect-Schwachstellen zu erkennen, empfiehlt sich eine Snyk-IDE-Sicherheitserweiterung, beispielsweise die Snyk-Erweiterung für Visual Studio Code. Dieses Tool erkennt Open-Redirect-Schwachstellen in Ihrem Code, informiert Sie über Schwachstellen und deren Sicherheitsstufe, listet Best Practices zu ihrer Vermeidung auf und stellt Codebeispiele bereit, mit denen Sie die Schwachstellen beheben können.

Der Einstieg in die Snyk-Erweiterung für Visual Studio Code ist ganz einfach. Beginnen Sie mit der Installation, Konfiguration und Authentifizierung der Erweiterung.

Um die Erweiterung in Aktion zu sehen, verwenden Sie den gleichen anfälligen Code wie zuvor. Öffnen Sie die Datei routes/web.php und ersetzen Sie die Route /vulnerable durch Folgendes:

Route::get('/vulnerable', function (Request $request) {
   // Get the 'redirect' parameter from the query string
   $redirectUrl = $request->input('redirect');

   // Perform the redirect
   return redirect($redirectUrl);
});

Speichern Sie die Datei und wählen Sie Snyk in der Seitenleiste von VS Code aus. Klicken Sie unter „Code-Sicherheit“ auf die Schaltfläche Erneut scannen, falls der Scan nicht bereits läuft:

Visual Studio Code zeigt eine Laravel-web.php-Route, die einen Redirect-Abfrageparameter ausliest und eine Redirect-Antwort zurückgibt, daneben Snyk-Scanbereiche.

Nach Abschluss des Scans wird eine Liste mit Schwachstellen angezeigt. Klappen Sie in den Ergebnissen web.php auf und wählen Sie Open Redirect aus. Die Snyk-Erweiterung zeigt Ihnen weitere Details zur Schwachstelle und erklärt, wie Sie sie beheben können:

Snyk Code markiert in einer Laravel-web.php-Route in Visual Studio Code eine Open-Redirect-Schwachstelle und zeigt einen Lösungsvorschlag.

Die Snyk-Erweiterung hebt den anfälligen Code auch direkt im Code hervor. Wenn Sie den Mauszeiger darüber bewegen, erhalten Sie weitere Informationen zur Schwachstelle:

Code-Editor mit einem Laravel-Redirect-Aufruf und einer Warnung vor einer Open-Redirect-Schwachstelle (CWE-601) sowie Hinweisen zu ihrer Vermeidung.

Diese Erweiterung bietet außerdem Open-Source-Sicherheit, ein Tool, mit dem Sie Schwachstellen in den Open-Source-Bibliotheken Ihrer Anwendung finden und beheben können. Findet Snyk Schwachstellen in Ihren Open-Source-Bibliotheken, darunter auch Open-Redirect-Schwachstellen, werden die Ergebnisse im Anzeigefenster der Snyk-Erweiterung dargestellt:

Visual Studio Code zeigt eine Laravel-Route, die Nutzer zu einer URL weiterleitet, die über einen Request-Parameter übergeben wurde. Snyk-Sicherheitspanels sind sichtbar.

Fazit

In diesem Artikel haben Sie alles über Open-Redirect-Schwachstellen in Laravel-Anwendungen und die damit verbundenen Risiken erfahren, darunter Phishing-Angriffe und die Verbreitung von Malware. Außerdem haben Sie gelernt, wie Sie diese Schwachstelle beheben können, indem Sie feste Weiterleitungen implementieren, zulässige Ziele auf eine Allowlist setzen und Weiterleitungen zu externen Domains unterbinden. Diese Strategien erhöhen die Sicherheit Ihrer Laravel-Anwendungen erheblich, da sie sicherstellen, dass Benutzer nur zu vertrauenswürdigen und vordefinierten Zielen weitergeleitet werden.

Wenn Sie die Sicherheit noch weiter erhöhen möchten, empfehlen sich Snyk-IDE-Erweiterungen. Mit Snyk können Sie Ihre Laravel-Anwendungen noch besser vor verschiedensten Schwachstellen schützen, einschließlich Open Redirects.

Die Snyk-Erweiterung für Visual Studio Code scannt Ihre Codebasis, identifiziert Schwachstellen und liefert konkrete Erkenntnisse. So können Entwickler potenzielle Bedrohungen erkennen, bevor sie die Produktionsumgebung erreichen. Mit der umfassenden Palette an Sicherheitslösungen von Snyk können Entwickler ihre Laravel-Anwendungen proaktiv schützen, für robusten Schutz sorgen und die Sicherheitslage ihrer Projekte insgesamt verbessern.

Starten Sie mit Capture-the-Flag

Erfahren Sie, wie Sie Capture-the-Flag-Herausforderungen lösen – mit unserem jederzeit verfügbaren virtuellen 101-Workshop.


Weiterlesen

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSec: Sicherheit, die mit der KI-Entwicklung Schritt hält

KI-gestützte Entwicklung überholt herkömmliche Security-Workflows. Snyk Agentic AppSec setzt Security-Agenten ein, die Schwachstellen kontinuierlich finden, beheben und überprüfen – während Menschen die Maßstäbe festlegen.

blog feature ai violet
Blog

VulnBump: Können KI-Agenten anfällige Abhängigkeiten beheben, ohne den Build zu beschädigen?

VulnBump testet KI-Agenten anhand von 307 realen Dependency-Upgrades. Eine Lösung zählt nur, wenn die Sicherheitslücke behoben ist und Build sowie Tests weiterhin erfolgreich sind.

Blog

Frontier-Modelle fanden die Schwachstellen. Nur der Angreifer fand die Angriffsketten.

Die statische Analyse fand die Schwachstellen, doch erst Live-Angriffstests bewiesen, wie sie sich zu Angriffen verketten lassen. Ein Vergleich von Evo COS, Claude Security und Claude Code Security.