Sichere Implementierung
Umfassendes Framework für die sichere Dateifreigabe
Strategie für die sichere Implementierung
graph TD
A[Dateifreigabe-Anfrage] --> B[Clientseitige Validierung]
B --> C[Serverseitige Validierung]
C --> D[Dateityp-Prüfung]
D --> E[Datei-Größenprüfung]
E --> F[Dateiname bereinigen]
F --> G[Generierung eines eindeutigen Dateinamens]
G --> H[Speichern in einem sicheren Speicherort]
H --> I[Festlegung strenger Berechtigungen]
Validierungsmethoden
Mehrschichtiger Validierungsansatz
Validierungsebene |
Sicherheitsmechanismus |
Clientseitig |
Erste grundlegende Prüfungen |
Serverseitig |
Umfassende Validierung |
Dateisystem |
Strenge Berechtigungsrichtlinien |
Sichere Python-Implementierung
import os
import magic
from werkzeug.utils import secure_filename
import uuid
class FileUploadHandler:
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'pdf'}
MAX_FILE_SIZE = 5 * 1024 * 1024 ## 5MB
@staticmethod
def validate_file(file_stream):
## Datei-Größe prüfen
file_stream.seek(0, os.SEEK_END)
file_size = file_stream.tell()
file_stream.seek(0)
if file_size > FileUploadHandler.MAX_FILE_SIZE:
raise ValueError("Datei zu groß")
## Dateityp mit magic prüfen
file_type = magic.from_buffer(file_stream.read(2048), mime=True)
file_stream.seek(0)
erlaubte_mime_typen = {
'image/jpeg',
'image/png',
'application/pdf'
}
if file_type not in erlaubte_mime_typen:
raise ValueError("Ungültiger Dateityp")
@staticmethod
def secure_filename(filename):
## Dateinamen bereinigen
bereinigter_name = secure_filename(filename)
## Eindeutigen Dateinamen generieren
eindeutiger_name = f"{uuid.uuid4()}_{bereinigter_name}"
return eindeutiger_name
@staticmethod
def save_file(file_stream, upload_directory):
## Datei validieren
FileUploadHandler.validate_file(file_stream)
## Sicheren Dateinamen generieren
dateiname = FileUploadHandler.secure_filename(file_stream.filename)
## Vollständiger Dateipfad
dateipfad = os.path.join(upload_directory, dateiname)
## Datei mit eingeschränkten Berechtigungen speichern
with open(dateipfad, 'wb') as f:
f.write(file_stream.read())
## Sichere Dateiberechtigungen festlegen
os.chmod(dateipfad, 0o640)
Bash-Dateiberechtigungen verstärken
#!/bin/bash
## Sicheres Upload-Verzeichnis
UPLOAD_DIR="/var/www/uploads"
## Verzeichnis mit eingeschränkten Berechtigungen erstellen
mkdir -p "$UPLOAD_DIR"
chown www-data:www-data "$UPLOAD_DIR"
chmod 750 "$UPLOAD_DIR"
## Standard-ACL für neue Dateien festlegen
setfacl -d -m u::rw,g::r,o::- "$UPLOAD_DIR"
Erweiterte Sicherheitsüberlegungen
Strategien für die Dateispeicherung
- Speichern Sie hochgeladene Dateien außerhalb des Webroots
- Verwenden Sie separate Speicherbände
- Implementieren Sie Zugriffs-Protokollierung
Empfohlene Berechtigungen
- Webserver-Benutzer: Lesen/Schreiben
- Gruppe: Nur Lesen
- Andere: Kein Zugriff
LabEx Sicherheitsrichtlinien
Bei LabEx legen wir Wert auf einen ganzheitlichen Ansatz zur Dateifreigabesicherheit, der mehrere Validierungsebenen und strenge Zugriffskontrollen kombiniert.
Wichtige Implementierungsprinzipien
- Vertrauen Sie niemals Benutzereingaben
- Validieren Sie auf mehreren Ebenen
- Verwenden Sie sichere Bibliotheken
- Implementieren Sie strenge Berechtigungsmodelle
- Protokollieren und überwachen Sie Dateifreigabetätigkeiten