Aktueller Standort: Startseite> Neueste Artikel> Häufige PHP-Sicherheitslücken und -Schutz: Ein praktischer Leitfaden zum Einschleusen, Einbinden und Hochladen von Dateien

Häufige PHP-Sicherheitslücken und -Schutz: Ein praktischer Leitfaden zum Einschleusen, Einbinden und Hochladen von Dateien

M66 2025-10-28

Einführung

Mit der Entwicklung des Internets nehmen PHP-basierte Websites immer noch eine große Anzahl von Anwendungsszenarien ein. Aufgrund der Flexibilität und Beliebtheit von PHP können unsichere Schreibmethoden leicht von Angreifern ausgenutzt werden. In diesem Artikel werden die Verwendungsmethoden und Abwehrideen mehrerer häufiger Schwachstellen aus praktischer Sicht vorgestellt und der Beispielcode zum leichteren Verständnis und zur Reparatur beibehalten (die Codeblöcke bleiben so weit wie möglich erhalten und nur die verwirrende HTML-Struktur wird bereinigt). Informationen zur Website-Werbung oder interne Links wurden aus dem Artikel entfernt.

Beispiele und Schutz für SQL-Injection

Beschreibung: Angreifer fügen bösartige SQL-Fragmente in die Eingabe ein und ändern die ursprüngliche Abfragelogik, um die Überprüfung zu umgehen oder Daten zu stehlen/zu manipulieren.

 <?php
$id = $_GET['id'];

// Spleißen SQL Abfrageanweisung
$sql = "SELECT * FROM users WHERE id = " . $id;

// Abfrage ausführen
$result = mysqli_query($conn, $sql);

// Abfrageergebnisse verarbeiten
// ...
?>

Problem: Durch das direkte Zusammenfügen von Benutzereingaben wird die Anweisung manipuliert. Wenn Sie beispielsweise id=1 ODER 1=1 übergeben, ist die Bedingung immer wahr, was zu einem Verlust vertraulicher Daten oder einer Umgehung der Authentifizierung führen kann.

Schutzvorschläge: Verwenden Sie parametrisierte Abfragen (vorverarbeitete Anweisungen) oder ORM, um ein direktes Zusammenfügen von Benutzereingaben zu vermeiden. Führen Sie eine Typüberprüfung der Eingabe durch (stellen Sie beispielsweise sicher, dass die ID eine Ganzzahl ist). Behandeln Sie Fehlermeldungen angemessen, um zu verhindern, dass interne Details preisgegeben werden.

Die Datei enthält Beispiele für Schwachstellen und Schutzmaßnahmen

Beschreibung: Wenn der Pfad, der Dateien enthält, nicht streng kontrolliert wird, kann ein Angreifer einen speziell gestalteten Pfad übergeben, um jede beliebige Datei einzuschließen, sogar eine Remote-Datei (sofern die Konfiguration dies zulässt), was zur Offenlegung sensibler Dateien oder zur Remote-Codeausführung führt.

 <?php
$page = $_GET['page'];

// Spleißen文件路径并包含文件
include("pages/" . $page . ".php");

?>

Problem: Es gibt keine Einschränkung für den Seitenparameter . Ein Angreifer kann über einen Pfad wie page=../config auf die sensible Konfiguration des übergeordneten Verzeichnisses zugreifen oder diese nach dem Hochladen der Datei mithilfe eines Skripts ausführen.

Schutzvorschläge: Pfade von Benutzern nicht direkt einbeziehen; Verwenden Sie einen Whitelist-Mechanismus, um die Dateinamen zu begrenzen, die aufgenommen werden können. Verwenden Sie ein Basisverzeichnis und lösen Sie den Pfad vor der Aufnahme in einen absoluten Pfad auf und überprüfen Sie, ob er innerhalb des zulässigen Bereichs liegt. Deaktivieren Sie PHP-Konfigurationsoptionen, die eine Remote-Einbindung ermöglichen (z. B. „allow_url_include“).

Beispiele und Schutzmaßnahmen für Sicherheitslücken beim Hochladen von Dateien

Beschreibung: Wenn die Datei-Upload-Funktion nur die Dateierweiterung oder den Dateinamen überprüft, kann ein Angreifer ein getarntes ausführbares Skript hochladen und es auf dem Server ausführen und dadurch höhere Berechtigungen erlangen.

 <?php
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);

// Dateityp prüfen
$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
if ($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif") {
    exit("Erlauben Sie nur das Hochladen von Bilddateien!");
}

// Dateien hochladen
if(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
    echo "Datei erfolgreich hochgeladen!";
} else {
    echo "Das Hochladen der Datei ist fehlgeschlagen!";
}

?>

Problem: Eine alleinige Beurteilung anhand der Dateierweiterung ist unzuverlässig. Angreifer können die Erweiterung ändern oder MIME-Typen fälschen, um schädliche Skripte hochzuladen.

Schutzvorschläge:

  • Führen Sie eine Inhaltserkennung für die Datei durch (z. B. mithilfe einer Bildverarbeitungsbibliothek, um die tatsächlichen Bildheaderinformationen zu überprüfen), und nicht nur die Beurteilung der Erweiterung oder des Front-End-MIME-Typs.
  • Generieren Sie einen zufälligen Dateinamen für die hochgeladene Datei und speichern Sie sie in einem Verzeichnis, das nicht direkt über das Internet zugänglich ist (oder konfigurieren Sie den Server so, dass die Ausführung von Skripten in diesem Verzeichnis verhindert wird).
  • Begrenzen Sie die Dateigröße und -geschwindigkeit und überprüfen Sie die Benutzerberechtigungen.
  • Stellen Sie in Verzeichnissen, die öffentlich zugänglich sein müssen, sicher, dass die Serverkonfiguration das Parsen von ausführbaren Typen wie PHP verbietet (z. B. über die Webserverkonfiguration oder die Platzierung von .htaccess).

Allgemeine Empfehlungen für sichere Entwicklung und Betrieb

Sicherheit kann nicht in einem Arbeitsgang erreicht werden. Es wird empfohlen, während der Entwicklung sowie des Betriebs und der Wartung die folgenden Vorgehensweisen anzuwenden:

  • Eingaben sind immer nicht vertrauenswürdig: Alle externen Eingaben werden überprüft, gefiltert und nach dem Whitelist-Prinzip verarbeitet.
  • Das Prinzip der geringsten Rechte: Versuchen Sie, Konten mit eingeschränkten Berechtigungen für Datenbankkonten zu verwenden; Dateisystemberechtigungen sollten auf die für die Ausführung erforderlichen Mindestberechtigungen beschränkt werden.
  • Verwenden Sie moderne Bibliotheken und Frameworks: Versuchen Sie, ausgereifte Frameworks oder Bibliotheken für die Verwaltung von Datenbanken, Authentifizierung und Dateivorgängen zu verwenden, und vermeiden Sie es, häufig verwendete Funktionen selbst zu implementieren.
  • Code-Audit und automatisiertes Scannen: Führen Sie regelmäßige Code-Audits durch, führen Sie statische Analyse- und dynamische Scan-Tools ein und beheben Sie erkannte Probleme umgehend.
  • Protokolle und Warnungen: Kann ungewöhnliches Verhalten erkennen und umgehend reagieren. Protokolle sollten keine vertraulichen Anmeldeinformationen enthalten.

Abschluss

Dieser Artikel zeigt einige typische PHP-Sicherheitsprobleme und ihre Schutzideen. Es besteht die Hoffnung, dass Entwickler das Sicherheitsbewusstsein in jeden Aspekt der Anforderungen, des Designs, der Implementierung sowie des Betriebs und der Wartung integrieren können. Für jede Art von Schwachstelle im Beispiel kann die tatsächliche Umgebung komplexer sein. Es wird empfohlen, die Ergebnisse von Code-Audits, automatisierten Scans und Penetrationstests für gezielte Reparaturen zu kombinieren.