Skip to main content

Was Sie über die Sicherheit von PHP-Code wissen sollten

Artikel von

4. September 2024

0 Min. Lesezeit

PHP ist eine weit verbreitete Skriptsprache für die Webentwicklung. Aufgrund ihrer Popularität ist es entscheidend, die potenziellen Sicherheitsrisiken zu verstehen und zu wissen, wie sie sich eindämmen lassen. Ganz gleich, ob Sie CMS-Anwendungen mit WordPress bereitstellen oder Unternehmensanwendungen mit dem PHP-Framework Laravel entwickeln: Die Bedeutung der PHP-Sicherheit und die geschäftlichen Auswirkungen einiger wichtiger Schwachstellen im PHP-Interpreter sollten Entwickler unbedingt richtig einschätzen.

Warum ist es wichtig, sich vor PHP-Sicherheitslücken zu schützen? Aufgrund seiner Popularität und weiten Verbreitung ist PHP häufig ein Ziel von Hackern und anderen böswilligen Akteuren. Sicherheitslücken können aus verschiedenen Gründen entstehen, etwa durch schlechte Programmierpraktiken, unzureichende Bereinigung von Benutzereingaben oder veraltete Versionen.

Stellen Sie sich zum Beispiel vor, ungeprüfte Benutzereingaben werden in einer SQL-Abfrage verwendet. Das kann zu SQL-Injection führen, einer häufigen Sicherheitslücke.

$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id = $id";

Im gezeigten Code kann ein böswilliger Benutzer den Parameter id in der URL manipulieren, um eine SQL-Injection auszuführen. Um dies zu verhindern, müssen Benutzereingaben unbedingt bereinigt werden, zum Beispiel mit mysqli_real_escape_string oder vorbereiteten Anweisungen:

$id = mysqli_real_escape_string($conn, $_GET['id']);
$sql = "SELECT * FROM users WHERE id = $id";

Sicherheitslücken in Ihren PHP-Anwendungen können erhebliche geschäftliche Folgen haben. Sie können zu Datenschutzverletzungen führen, die aufgrund der Nichteinhaltung von Datenschutzvorschriften wie der DSGVO und dem CCPA hohe Geldbußen nach sich ziehen können. Außerdem kann ein Sicherheitsvorfall das Vertrauen Ihrer Kunden erschüttern und so zu Umsatzeinbußen führen. Auch die Kosten für die Behebung von Sicherheitslücken können hoch sein, besonders wenn sie erst spät im Entwicklungszyklus entdeckt werden. Deshalb ist es entscheidend, Sicherheit von Projektbeginn an zur Priorität zu machen.

Häufige Fragen

Wie kann ich meine PHP-Anwendung vor Sicherheitslücken schützen?

Validieren und bereinigen Sie Benutzereingaben stets. Verwenden Sie vorbereitete Anweisungen mit parametrisierten Abfragen, um SQL-Injection zu verhindern. Nutzen Sie die neuesten PHP-Versionen und Frameworks, da diese Sicherheitspatches für bekannte Sicherheitslücken enthalten. Scannen Sie Ihren Code, Ihre Anwendungsabhängigkeiten und Ihre Cloud-Infrastrukturkonfiguration regelmäßig mit Tools wie Snyk auf Sicherheitslücken. Halten Sie sich an sichere Programmierpraktiken.

Warum ist PHP-Sicherheit wichtig?

PHP-Sicherheit ist entscheidend, denn eine verwundbare PHP-Anwendung kann zu Datenschutzverletzungen, Vertrauensverlust bei Kunden und Bußgeldern wegen Verstößen gegen Vorschriften führen. Da PHP häufig für die Entwicklung von Webanwendungen verwendet wird, ist es ein beliebtes Ziel von Angreifern. Mit sicherem PHP-Code schützen Sie die Daten Ihrer Nutzer und Ihr Unternehmen.

Was ist ein PHP-Schwachstellen-Scanner?

Ein PHP-Schwachstellen-Scanner ist ein Tool, das Ihren PHP-Code automatisch auf bekannte Sicherheitslücken überprüft. Beispiele hierfür sind Snyk und der integrierte Sicherheitsprüfer von Composer. Diese Tools helfen Ihnen, Sicherheitsprobleme in Ihren PHP-Anwendungen zu erkennen und zu beheben.

Was ist ein PHP-Sicherheitshinweis?

Ein PHP-Sicherheitshinweis ist eine öffentliche Mitteilung zu einer Sicherheitslücke in einer PHP-Komponente. Er enthält Details zur Sicherheitslücke, ihren möglichen Auswirkungen und dazu, wie sie behoben werden kann. PHP.net und andere PHP-Websites veröffentlichen häufig solche Hinweise. Snyk pflegt außerdem eine Datenbank mit PHP-Sicherheitshinweisen, die auf dem Composer-Paketmanager basiert.

Häufige PHP-Sicherheitslücken

Sehen wir uns einige häufige PHP-Sicherheitslücken an und lernen Sie hilfreiche Ressourcen zur Entwicklersicherheit kennen, mit denen Sie diese eindämmen können.

Cookies und Sitzungsverwaltung

Cookies und Sitzungen sind grundlegende Bestandteile der Webentwicklung. Sie ermöglichen es, den Zustand zwischen Anfragen beizubehalten. Werden sie jedoch nicht korrekt verwaltet, können sie zu schwerwiegenden Sicherheitslücken führen.

In PHP ist es besonders bei der Verwendung eines Web-Frameworks wie Laravel wichtig, Cookies und Sitzungsdaten bei der Authentifizierung zu schützen. Hier sind einige Tipps:

  • Verwenden Sie immer sichere Cookies mit dem HTTP-only-Attribut.

  • Setzen Sie das Attribut SameSite vorzugsweise auf Lax oder Strict, um Cross-Site-Request-Forgery-Angriffe (CSRF) zu verhindern.

  • Generieren Sie nach dem Anmelden oder Ändern des Passworts eine neue Sitzungs-ID, um Session-Fixation-Angriffe zu vermeiden.

In Laravel können Sie diese Einstellungen in der Datei config/session.php festlegen:

'cookie' => env(
    'SESSION_COOKIE',
    Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
'cookie_secure' => env('SESSION_SECURE_COOKIE', null),
'cookie_same_site' => 'lax',

Weitere Richtlinien zur Websicherheit finden Sie unter Laravel-Anwendungen absichern. Sie helfen Ihnen, PHP-Sicherheitslücken vorzubeugen.

SQL-Injection

SQL-Injection ist eine Code-Injection-Technik, mit der Angreifer Schwachstellen in den Datenbankabfragen einer Webanwendung ausnutzen. Sie kann unbefugten Zugriff auf vertrauliche Daten sowie deren Manipulation oder Löschung ermöglichen.

Sehen Sie sich den folgenden anfälligen PHP-Code an:

$id = $_GET['id'];
$result = mysqli_query($con, "SELECT * FROM users WHERE id = $id");

Ein Angreifer kann den Parameter id in der URL manipulieren, um die SQL-Abfrage zu verändern. Verwenden Sie vorbereitete Anweisungen, um dies zu verhindern:

$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("s", $_GET['id']);
$stmt->execute();

Weitere Informationen zu SQL-Injection und PHP-Sicherheit finden Sie in diesem kostenlosen Lernangebot zur PHP-Sicherheit.

Code-Injection

Code-Injection ist eine weitere häufige Sicherheitslücke. Dabei kann ein Angreifer beliebigen Code in Ihre Anwendung einschleusen und ausführen. In PHP geschieht dies oft, wenn Benutzereingaben ohne ausreichende Überprüfung oder Bereinigung an die Funktion eval() oder an Systemaufrufe übergeben werden.

Betrachten wir folgenden Anwendungsfall in einem PHP-Laravel-Projekt: Ein Entwickler stand vor der Herausforderung, innerhalb eines Blade-Templates dynamisch eine Bild-URL zu erzeugen. Ziel war es, ein Bild anzuzeigen, dessen Pfad aus variablen Inhalten und Laravels URL-Hilfsfunktion zusammengesetzt wurde. Dafür verwendete der Entwickler die PHP-Funktion eval():

<?php
  eval("\$image_url = \"{{ url('public/uploads/trust/".$value.".jpg') }}\";");
?>

<img src="{{ $image_url }}" />

Der Entwickler wollte eine flexible Möglichkeit schaffen, Bild-URLs auf Grundlage der Variablen $value zu generieren. Die Verwendung von eval() ist jedoch mit erheblichen Sicherheitsrisiken verbunden, zum Beispiel:

  • Code-Injection: Kann ein Angreifer den Inhalt der an eval() übergebenen Zeichenfolge beeinflussen, kann er beliebigen PHP-Code auf dem Server ausführen. Dies kann zu unbefugtem Zugriff, Datenschutzverletzungen und einer Vielzahl weiterer Sicherheitsprobleme führen.

  • Aufwendiges Debugging und schwierige Wartung: Über eval() ausgeführter Code ist oft schwerer zu debuggen und zu warten, da er die Logik und den Ablauf der Anwendung verschleiern kann. Diese Komplexität kann unbeabsichtigt weitere Sicherheitslücken oder Fehler verursachen.

Der Entwickler hätte mithilfe von Laravels Blade-Template-Engine einen sichereren und besser wartbaren Ansatz wählen können, um die Bild-URL zu generieren:

<img src="{{ url('public/uploads/trust/'.$value.'.jpg') }}" />

Bei dieser Methode kommt eval() gar nicht zum Einsatz. Stattdessen werden die integrierten Funktionen von Laravel genutzt, um dynamische Inhalte sicher zu erzeugen. Lesen Sie auch, wie Sie PHP-Code-Injection verhindern können.

PHP-Composer-Abhängigkeiten auf Sicherheitslücken prüfen

Ein häufig übersehener Bereich der Anwendungssicherheit sind Abhängigkeiten von Drittanbietern. In PHP verwenden wir Composer, um diese Abhängigkeiten zu verwalten. Es ist entscheidend, Ihre Abhängigkeiten regelmäßig auf bekannte Sicherheitslücken zu überprüfen.

Mit Tools wie Snyk können Sie Ihre Composer-Abhängigkeiten automatisch auf bekannte Sicherheitslücken prüfen. So installieren und verwenden Sie Snyk:

npm install -g snyk
snyk test

Wenn Sie im Stammverzeichnis den Befehl snyk test ausführen, um Ihre Composer-Abhängigkeiten auf Sicherheitslücken zu prüfen, sehen Sie möglicherweise eine Ausgabe wie diese:

Testing /path/to/your/laravel-project/composer.lock...

✗ High severity vulnerability found in symfony/http-foundation
  Description: Arbitrary Code Execution
  Info: https://snyk.io/vuln/SNYK-PHP-SYMFONY-174006
  Introduced through: symfony/http-foundation@5.4.0
  From: symfony/http-foundation@5.4.0
  From: symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0
  From: symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0
  From: symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0 > symfony/http-foundation@5.4.0
  Fix: Upgrade to symfony/http-foundation@5.4.1

Tested 123 dependencies for known vulnerabilities, found 1 vulnerabilities, 122 vulnerable paths.

Ich empfehle Ihnen dringend, mehr darüber zu lesen, wie Sie mit Snyk Ihre PHP-Composer-Abhängigkeiten auf Sicherheitslücken prüfen.

Sicherheitslücken im PHP-Interpreter

Selbst wenn Sie sicher programmieren, können Sicherheitslücken im PHP-Interpreter selbst Ihre Anwendungen gefährden. So wurden beispielsweise mehrere Sicherheitslücken im Debian-PHP8.2-Paket gemeldet. Sie finden diese in der Snyk-Datenbank.

Zu den wichtigen Sicherheitslücken im PHP-Interpreter zählen:

Diese Sicherheitslücken könnten es Angreifern ermöglichen, beliebigen Code auszuführen oder einen DoS-Angriff (Denial of Service) zu verursachen. Halten Sie deshalb Ihre PHP-Version unbedingt aktuell und prüfen Sie regelmäßig, ob für den verwendeten PHP-Interpreter neue Sicherheitslücken gemeldet wurden.

Wie unterstützt Snyk die PHP-Sicherheit?

Snyk ist eine leistungsstarke, entwicklerorientierte Sicherheitsplattform, mit der Entwickler Sicherheitslücken in ihren PHP-Anwendungen erkennen und beheben können. Snyk bietet eine umfangreiche Datenbank bekannter Sicherheitslücken und kann Ihr Projekt automatisch daraufhin überprüfen. Außerdem erstellt Snyk automatisch Pull Requests mit Korrekturen. So sparen Entwickler viel Zeit bei der Behebung erkannter Sicherheitslücken.

Was sind die häufigsten PHP-Sicherheitslücken?

Entwickler sollten mehrere häufige PHP-Sicherheitslücken kennen. Dazu gehören:

  1. Injection-Angriffe: Sie treten auf, wenn ein Angreifer schädlichen SQL-Code oder Skripte in Ihren PHP-Code einschleusen kann. Ein Beispiel dafür ist eine SQL-Injection, bei der der Angreifer SQL-Abfragen manipuliert, um sich unbefugten Zugriff auf die Datenbank zu verschaffen.

  2. Cross-Site-Scripting (XSS): Dabei schleust ein Angreifer schädliche Skripte in Webseiten ein, die andere Benutzer aufrufen. Diese Skripte können dann vertrauliche Daten der Benutzer stehlen.

  3. Cross-Site-Request-Forgery (CSRF): Bei dieser Angriffsart bringt ein Angreifer ein Opfer dazu, eine schädliche Anfrage zu senden.

  4. Datei-Inclusion-Sicherheitslücken: Sie treten auf, wenn ein Angreifer eine Datei von einem Remote-Server einbinden kann. Dies führt häufig dazu, dass Code auf dem Server ausgeführt wird.

Wie geht es mit der PHP-Sicherheit weiter?

Eine Möglichkeit, über Sicherheitslücken im PHP-Interpreter auf dem Laufenden zu bleiben, ist, Ihre Git-Repositories mit Snyk zu verbinden. Snyk überwacht Ihre Abhängigkeiten automatisch auf Sicherheitslücken und benachrichtigt Sie, sobald neue gemeldet werden. Vielleicht stellen Sie Ihre PHP-Anwendungen mit Docker oder einer anderen Containertechnologie bereit. Dann ist es entscheidend, Ihre Container-Images auf Sicherheitslücken zu überwachen, denn Docker-Container-Images bündeln den PHP-Interpreter und weitere Abhängigkeiten, die ebenfalls anfällig sein können.

Wenn Sie Docker verwenden, können Sie Ihre Docker-Container-Images mit Snyk auf bekannte Sicherheitslücken prüfen. Führen Sie dazu Folgendes aus:

snyk container test your-docker-image

Befolgen Sie unbedingt James Walkers Best Practices für ein produktionsreifes Dockerfile für PHP-Anwendungen sowie Neema Mugangas Leitfaden PHP-Container absichern, um Ihre PHP-Container-Images zu schützen.

Der Schutz vor PHP-Sicherheitslücken sollte kein nachträglicher Einfall sein, sondern ein fester Bestandteil Ihres Entwicklungsprozesses. Dazu gehören sichere Programmierpraktiken, regelmäßige Updates und die Aufmerksamkeit für neu gemeldete Sicherheitslücken im PHP-Ökosystem.

Wie kann ich mehr über PHP-Sicherheit erfahren?

Um mehr über PHP-Sicherheit zu erfahren, können Sie Online-Tutorials im Snyk-Blog verfolgen und kostenlose, kurze Online-Lektionen auf Snyk Learn absolvieren. Websites wie OWASP bieten ebenfalls umfangreiche Ressourcen zur Sicherheit von Webanwendungen, einschließlich PHP.

Sichern Sie Ihren Code während der Entwicklung

Snyk scannt Ihren Code auf Qualitäts- und Sicherheitsprobleme und gibt Ihnen direkt in Ihrer IDE Empfehlungen zur Behebung.

Gepostet in:

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.

feature insights context
Blog

Autonome Angriffe sind bereits Realität. Die Verteidigung muss Schritt halten.

Autonome Angreifer verkürzen das Zeitfenster für die Verteidigung. Erfahren Sie, wie kontinuierliches Erkennen, Beheben, Validieren und Verhindern Sicherheitsteams helfen kann, Schritt zu halten.

illustration hero ai
Blog

Der KI-Hurrikan ist da

KI beschleunigt gleichermaßen die Softwareentwicklung und Cyberangriffe. Führungskräfte müssen Agents und Code von Anfang an absichern, zur Laufzeit Kontrollen durchsetzen und Abwehrmaßnahmen unabhängig validieren.