Heim > Artikel > Backend-Entwicklung > Sicherheitslücke beim Hochladen beliebiger PHP-Dateien
Details zur Sicherheitslücke:
Diese Sicherheitslücke besteht in einer sehr häufig verwendeten Funktion in PHP: move_uploaded_files. Entwickler verwenden immer diese Funktion, um hochgeladene Dateien zu verschieben. Diese Funktion prüft, ob es sich bei der hochgeladenen Datei um eine legale Datei handelt (unabhängig davon, ob sie über den HTTP-Post-Mechanismus hochgeladen wird). Wenn es sich um eine legale Datei handelt, muss sie im angegebenen Verzeichnis abgelegt werden.
Beispiel:
move_uploaded_file ( string $filename , string $destination ) Das Problem hierbei ist, dass Nullzeichen in den Dateinamen eingefügt werden können (diese Sicherheitslücke wurde schon oft behoben, z CVE-2006 -7243) können Angreifer durch das Einfügen von Nullzeichen beliebige Dateien hochladen, was zu Sicherheitslücken bei der Remotecodeausführung usw. führt.
Ich verwende DVWA, um dieses Beispiel zu demonstrieren. Die höchste Frage in DVWA ist aus verschiedenen Gründen nicht einfach zu bestehen. Sie soll Entwicklern sagen, wie sie eine sicherere Datei-Upload-Komponente entwickeln können. Schauen wir uns dieses Beispiel an:
Code-Snippet:
$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1); $uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG " || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){ if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path )) {
$html .= '';
$html .= 'Ihr Bild wurde nicht hochgeladen.';
$html .= '';🎜>else {
$html .= $target_path . ' erfolgreich hochgeladen!';
.
.