Skip to main content

Snyk Code unterstützt PHP-Schwachstellenscans jetzt in der Beta

Artikel von
Headshot of DeveloperSteve Coochin

DeveloperSteve Coochin

blog hero php example

2. September 2021

0 Min. Lesezeit

Die Unterstützung für PHP-Schwachstellenscans in Snyk Code ist jetzt als Beta verfügbar. Sicherheitsprobleme in PHP-Code lassen sich nun schnell und einfach erkennen.

Melden Sie sich zunächst bei Snyk an oder registrieren Sie sich für ein kostenloses Konto. Klicken Sie nach der Anmeldung im Dashboard oben rechts auf die Schaltfläche Add Project und verbinden Sie ein Repository, das Sie scannen möchten.

Dashboard-Menü mit ausgeklapptem Bereich „Projekt hinzufügen“ mit den Optionen GitHub, Cloud Foundry, Bitbucket Cloud, CLI, öffentliche GitHub-Repositories und Weitere.

Anschließend können Sie eine Verbindung zu verschiedenen Repository-Plattformen herstellen und alle von Ihnen verwalteten Repositories auf PHP-Schwachstellen scannen – auch private. Sie können auch über die CLI oder eine IDE scannen. Entdecken Sie weitere Möglichkeiten, Snyk Code in Ihre Entwicklungsumgebung zu integrieren.

Sehen wir uns die drei häufigsten Schwachstellen an, die die neuen PHP-Scans möglicherweise erkennen, und schauen wir uns an, worauf Sie im Rahmen der Beta-Version achten sollten.

XSS

Bei Cross-Site-Scripting-Schwachstellen (XSS) schleusen Angreifer schädlichen Code in vertrauenswürdige Anwendungen ein. Dieser kann gezielt im Browser eines Benutzers ausgeführt oder in die Laufzeitumgebung der Anwendung beziehungsweise das Betriebssystem eingeschleust werden.

In PHP kann dies verschiedene Ursachen haben und hängt häufig mit einer unzureichenden Bereinigung von Benutzereingaben zusammen. Ich habe dieses Thema in meinem vorherigen Beitrag über das Vermeiden von Code-Injection ausführlicher behandelt.

Sehen wir uns ein konkretes Beispiel an, um besser zu verstehen, worauf Sie in diesem Pull Request für ein Repository achten sollten.

Code-Diff nebeneinander in functions.php, der zeigt, wie eine PHP-POST-Variable durch hinzugefügte Bereinigung sicherer gemacht wird.

Im Beispiel sehen Sie einen direkten Vergleich: filter_var wird mit dem Filtertyp FILTER_SANITIZE_NUMBER_INT ergänzt, um die Bereinigung der $_POST-Eingabe zu übernehmen. Dieser Filter entfernt alle Zeichen außer Ziffern sowie Plus- und Minuszeichen.

Unsicherer Hash

Beim Hashing mit Code wird eine Zeichenfolge sicher in einen Wert oder Schlüssel umgewandelt, der die ursprüngliche Zeichenfolge repräsentiert. Das kann beispielsweise zur Speicherung in einer Datenbank oder während der Laufzeit für eine spätere Verwendung erfolgen. Häufig handelt es sich um ein Zwei-Wege-Hashing, bei dem die verschlüsselten Daten gespeichert und später wieder entschlüsselt werden können.

Traditionell galt MD5 – insbesondere in PHP – als Standardmethode zur Verschlüsselung von Dingen wie Benutzerpasswörtern, bis sich 2008 herausstellte, dass das Verfahren „kryptografisch gebrochen und für die weitere Verwendung ungeeignet“ ist.

Betrachten wir dieses Beispiel für eine Korrektur, die für dieses Repository umgesetzt wurde: Dabei wird null als Standardwert im Aufruf der Funktion für den signierten Schlüssel festgelegt. Das bedeutet: Wird kein Wert an die Funktion übergeben, ist der Standardwert null und kann innerhalb der Funktion für den signierten Schlüssel entsprechend verarbeitet werden.

Code-Diff nebeneinander für generated/gnupg.php: Der Parameter $passphrase wird so geändert, dass null als Standardwert verwendet wird.

SQL-Injection

Eine SQL-Injection ähnelt XSS. Die Schwachstelle ermöglicht es jedoch, eine schädliche SQL-Nutzlast in eine Datenbank einzuschleusen. In der Anwendungssicherheit kann dies dazu führen, dass ein neuer Benutzer mit erweiterten Berechtigungen hinzugefügt, Daten kompromittiert oder aus der Datenbank gelöscht werden.

Gerade bei Benutzereingaben, die in eine Datenbank gelangen, ist es besonders wichtig, daran zu denken: Eine ordnungsgemäße Bereinigung ist entscheidend.

Anhand eines weiteren Repository-Beispiels sehen Sie, dass der umgesetzte Pull Request PHPs filter_input_array verwendet, um die Eingaben für diese Datenbankfunktion zu verarbeiten.

Nebeneinander angezeigter PHP-Code-Diff mit hinzugefügter Eingabefilterung für Datenbankaktionen zum Aktualisieren, Löschen und Wiederherstellen

Scannen Sie Ihren PHP-Code mit Snyk Code

Das waren nur einige Beispiele für häufige Schwachstellen aus der umfangreichen Wissensdatenbank von Snyk Code. Probieren Sie es aus und sehen Sie, welche Probleme in Ihrem Code erkannt werden.

Bitte beachten Sie noch einmal, dass PHP in Snyk Code derzeit in der Beta ist. Wir freuen uns über Ihr Feedback, damit wir unsere PHP-Unterstützung weiter verbessern können. Wenden Sie sich mit Fragen oder wenn Sie über Ihre Ergebnisse sprechen möchten gerne an uns.

Hier finden Sie weitere interessante Beiträge zur PHP-Sicherheit:

Starten Sie mit Capture the Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.

Gepostet in: