
Vollständig sicheres Bild-Upload-Skript
Trotz der in der Frage besprochenen umfangreichen Maßnahmen sollte ein umfassendes Bild-Upload-Sicherheitsskript die folgenden zusätzlichen Aspekte berücksichtigen :
Kundenseitig Validierung:
- Verwenden Sie das Attribut HTML5 input type="file", um nicht unterstützte Dateitypen herauszufiltern.
Dateiumbenennung:
- Benennen Sie hochgeladene Dateien mit einem eindeutigen und zufälligen Namen um, um Dateinamen zu verhindern Vermutung.
- Entfernen Sie alle vertraulichen Informationen aus dem Dateinamen (z. B. Erweiterung).
Überprüfung der Dateierweiterung:
- Erstellen Erstellen Sie eine Whitelist der zulässigen Dateierweiterungen und validieren Sie die Erweiterung der hochgeladenen Datei damit.
- Überprüfen Sie, ob die Datei doppelt vorhanden ist Erweiterungen (z. B. „image.jpg.exe“).
Bildanalyse:
- Verwenden Sie Bildanalysetechniken, um zu identifizieren, ob die hochgeladene Datei ist ein gültiges Bild und keine schädliche Datei, die als Bild getarnt ist.
Datei Speicherung:
- Speichern Sie hochgeladene Bilder an einem sicheren Ort außerhalb des Stammverzeichnisses der Website.
- Verwenden Sie ein Dateisystem, das Zugriffskontrolllisten (ACLs) unterstützt, um den Zugriff einzuschränken autorisierte Benutzer.
Datenbank Integration:
- Erstellen Sie eine Datenbanktabelle, um hochgeladene Bilder zu verfolgen, einschließlich ihres ursprünglichen Namens, neuen Namens, MIME-Typs und Upload-Datums.
- Verwenden Sie die Datenbank zum Abrufen und Bilder für autorisierte Benutzer anzeigen.
Beispiel Skript:
Hier ist ein überarbeitetes PHP-Skript, das die oben genannten Sicherheitsmaßnahmen enthält:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php
if (! empty ( $_FILES [ 'image' ])) {
if (!in_array( $_FILES [ 'image' ][ 'type' ], [ 'image/jpeg' , 'image/png' , 'image/gif' ])) {
echo 'Invalid file type' ;
exit ;
}
if ( $_FILES [ 'image' ][ 'size' ] > 1 * 1024 * 1024) {
echo 'File too large' ;
exit ;
}
$filename = uniqid() . '.' . pathinfo ( $_FILES [ 'image' ][ 'name' ], PATHINFO_EXTENSION);
if (move_uploaded_file( $_FILES [ 'image' ][ 'tmp_name' ], 'uploads/' . $filename )) {
$sql = "INSERT INTO images (name, original_name, mime_type, upload_date) VALUES (:name, :original_name, :mime_type, :upload_date)" ;
$stmt = $conn ->prepare( $sql );
$stmt ->execute([
':name' => $filename ,
':original_name' => $_FILES [ 'image' ][ 'name' ],
':mime_type' => $_FILES [ 'image' ][ 'type' ],
':upload_date' => date ( 'Y-m-d H:i:s' )
]);
echo 'Image uploaded successfully' ;
} else {
echo 'Error uploading image' ;
}
}
?>
|
Nach dem Login kopieren
Dieses Skript validiert die Dateierweiterung, Größe und den MIME-Typ, benennt die Datei um, speichert es sicher und fügt der Datenbank einen Datensatz hinzu.
Zusätzlich Empfehlungen:
- Verwenden Sie eine Web Application Firewall (WAF), um böswillige Anfragen und Angriffe zu blockieren.
- Überwachen Sie das Upload-Verzeichnis auf verdächtige Aktivitäten.
- Regelmäßig Aktualisieren Sie die PHP-Version und die Sicherheitsbibliotheken, um Schwachstellen zu beheben.
Das obige ist der detaillierte Inhalt vonWie erstellt man ein sicheres Bild-Upload-Skript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!