Zurück zur Startseite

Bereinigung von Metadaten aus Python-Zwischenablage

Hintergrund-Python-Dienst für Windows bereinigt automatisch Metadaten aus Dateien in der Zwischenablage beim Kopieren. Unterstützt Bilder, DOCX, PDF mit Angriffsschutz und atomarem Überschreiben. Analyse der Architektur, des Codes und typischer Win32-API-Fehler.

Python-Daemon: Metadatenbereinigung in Zwischenablage
Advertisement 728x90

Automatische Metadatenbereinigung für Zwischenablage-Dateien in Python

Ein Hintergrund-Daemon für Windows fängt Dateien in der Zwischenablage direkt nach dem Kopieren ab und entfernt deren Metadaten vor dem Einfügen. Dadurch entfällt die manuelle Bearbeitung von Bildern, Dokumenten und Videos mit ExifTool oder Systemwerkzeugen. Die Verarbeitung erfolgt lokal ohne externe Datenübertragung, mit Schutz vor Beschädigung und Symlink-Angriffen.

Arbeiten mit der Zwischenablage über Win32-API

Die Zwischenablage-Überwachung wird durch einen ClipboardMonitor-Thread implementiert, der die Zwischenablage alle 500 ms abfragt. Das Schlüsselformat ist CF_HDROP, das eine Liste von Dateipfaden enthält.

Probleme mit pywin32:

Google AdInline article slot
  • In älteren Versionen gibt GetClipboardData(CF_HDROP) einen Zeiger auf DROPFILES zurück, was DragQueryFileW aus shell32.dll über ctypes erfordert.
  • In neueren Versionen gibt es eine Liste von Strings zurück, aber PyInstaller oder DLL-Fehlanpassungen können dieses Verhalten stören.

Prüfcode:

if win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_HDROP):
    file_list = win32clipboard.GetClipboardData(win32clipboard.CF_HDROP)

Pfadvalidierung für Sicherheit

Vor der Verarbeitung durchlaufen Pfade strenge Prüfungen in validate_path:

  • Absoluter Pfad.
  • Vergleich von ursprünglichem Inode und resolved_path (um Symlinks zu blockieren).
  • Ausschluss von Verzeichnissen in WINDIR.
  • Begrenzung der Anzahl von Dateien (Schutz vor Massenverarbeitung).

Dies verhindert Symlink-Angriffe und die Verarbeitung von Systemverzeichnissen. Zusätzlich wird resolved_path.is_file() geprüft, um Ordner auszuschließen.

Google AdInline article slot

Verarbeitungsarchitektur: In-Place-Überschreibung

Dateien werden an ihrem ursprünglichen Pfad überschrieben, ohne Ersetzung in der Zwischenablage – dies vereinfacht den Umgang mit Windows-Sperren im Speicher. Ablauf:

  • Kopieren einer Datei in die Zwischenablage.
  • Erkennen von CF_HDROP.
  • Validierung und Weitergabe an MetadataScrubber.
  • Überschreiben mit der bereinigten Version.

Bildbereinigung: Atomare Ersetzung

Unterstützung für JPEG, PNG, TIFF, BMP. Entfernt EXIF-Daten einschließlich Geolokation, Geräte- und Softwareinformationen.

Strategie – temporäre Datei für Atomarität:

Google AdInline article slot
with Image.open(file_path) as img:
    data = list(img.getdata())
    image_without_exif = Image.new(img.mode, img.size)
    image_without_exif.putdata(data)
    
    temp_path = file_path.with_suffix(file_path.suffix + '.temp')
    image_without_exif.save(temp_path, format=format_name)
    
    shutil.move(str(temp_path), str(file_path))

Sichert Integrität: Einfügen erhält entweder die Original- oder die bereinigte Datei.

DOCX: Direkte XML-Bearbeitung

python-docx ändert Eigenschaften, aber nicht Änderungsnachverfolgung und Kommentare. Lösung – Parsen von _blob-Teilen:

xml = part._blob.decode('utf-8')
if 'w:revision' in xml or 'w:ins' in xml or 'w:del' in xml:
    xml = xml.replace('w:revision', 'w:revision_removed')\
             .replace('w:ins ', 'w:p ')\
             .replace('w:del ', 'w:p ')
    part._blob = xml.encode('utf-8')

Ein Hack mit replace entfernt Revisions-Tags an der Wurzel, macht das Dokument für Word final. Risiko – komplexe Tabellen.

PDF und Video: Grundlegende Unterstützung

PDF über pypdf:

writer = PdfWriter()
for page in reader.pages:
    writer.add_page(page)
writer.add_metadata({})

Neuerstellung ohne Metadaten. Video (MP4, MKV, MOV) – grundlegende Atom-Bereinigung; vollständige Bereinigung erfordert ffmpeg.

Probleme mit dem System Tray

Vermeidung von Benachrichtigungen aufgrund von Shell_NotifyIcon-Fehlern:

  • Falscher HWND-Lebenszyklus führt zu DestroyWindow-Fehlern.
  • COM-Objekte stürzen ab beim Schließen von Tkinter.

Lösung – Entfernung des Moduls für Hintergrundstabilität. Abfrage alle 500 ms führt zu 0% CPU-Auslastung im Leerlauf.

Wichtige Punkte

  • Automatische Metadatenbereinigung (EXIF, Änderungsnachverfolgung, Geolokation) beim Kopieren in die Zwischenablage.
  • Schutz vor Symlink-Angriffen und Systempfaden durch Validierung.
  • Atomare Dateiüberschreibung ohne Korruptionsrisiko.
  • Lokale Verarbeitung in Python (PIL, pywin32, pypdf) ohne externe Server.
  • Optimierte Zwischenablage-Überwachung mit minimalem Overhead.

— Editorial Team

Advertisement 728x90

Weiterlesen