Zpět na domů

Čištění metadat ze schránky Python

Služba v pozadí na Python pro Windows automaticky čistí metadata ze souborů ve schránce při kopírování. Podporuje obrázky, DOCX, PDF s ochranou před útoky a atomárním přepsáním. Rozbor architektury, kódu a typických chyb Win32 API.

Python-démon: čištění metadat v clipboard
Advertisement 728x90

Automatické čištění metadat souborů ve schránce v Pythonu

Na pozadí běžící démon pro Windows zachytává soubory ve schránce ihned po zkopírování a odstraňuje z nich metadata před vložením. Tím odpadá ruční zpracování obrázků, dokumentů a videí pomocí ExifTool nebo systémových utilit. Zpracování probíhá lokálně bez přenosu dat ven, s ochranou proti poškození a útokům přes symbolické odkazy.

Práce se schránkou přes Win32 API

Monitorování schránky realizuje vlákno ClipboardMonitor, které kontroluje clipboard každých 500 ms. Klíčový formát je CF_HDROP, obsahující seznam cest k souborům.

Problémy s pywin32:

Google AdInline article slot
  • Ve starších verzích GetClipboardData(CF_HDROP) vrací ukazatel na DROPFILES, vyžadující DragQueryFileW z shell32.dll přes ctypes.
  • V novějších — seznam řetězců, ale PyInstaller nebo nekompatibilita DLL narušuje chování.

Kód kontroly:

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

Validace cest pro bezpečnost

Před zpracováním cesty procházejí přísnými kontrolami v validate_path:

  • Absolutní cesta.
  • Porovnání inode originálu a resolved_path (blokování symbolických odkazů).
  • Vyloučení adresářů v WINDIR.
  • Limit na počet souborů (ochrana proti hromadnému zpracování).

Tím se předchází symlink-útokům a zpracování systémových adresářů. Doplňkově se kontroluje resolved_path.is_file() pro vyloučení složek.

Google AdInline article slot

Architektura zpracování: přepsání na místě

Soubory jsou přepsány původní cestou bez nahrazení ve schránce — to zjednodušuje práci s blokováním paměti Windows. Posloupnost:

  • Zkopírování souboru do schránky.
  • Detekce CF_HDROP.
  • Validace a předání do MetadataScrubber.
  • Přepsání očištěnou verzí.

Čištění obrázků: atomární nahrazení

Podpora JPEG, PNG, TIFF, BMP. Odstraňují se EXIF s geodaty, zařízením, softwarem.

Strategie — dočasný soubor pro atomičnost:

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))

Zaručuje integritu: vložení obdrží buď originál, nebo očištěný soubor.

DOCX: přímá editace XML

python-docx mění vlastnosti, ale ne Sledování změn a komentáře. Řešení — parsování _blob částí:

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')

Hack s replace odstraní tagy revizí u kořene, čímž se dokument stane finálním pro Word. Riziko — složité tabulky.

PDF a videa: základní podpora

PDF přes pypdf:

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

Přeskládání bez metadat. Videa (MP4, MKV, MOV) — základní čištění atomů, úplné vyžaduje ffmpeg.

Problémy se systémovou lištou

Vynechání upozornění kvůli chybám Shell_NotifyIcon:

  • Nesprávný lifecycle HWND vede k DestroyWindow selháním.
  • COM-objekty padají při zavření Tkinter.

Řešení — odstranění modulu pro stabilitu na pozadí. Polling 500 ms dává 0% CPU při nečinnosti.

Co je důležité

  • Automatické čištění metadat (EXIF, Sledování změn, geodata) při kopírování do schránky.
  • Ochrana proti symlink-útokům a systémovým cestám přes validaci.
  • Atomární přepsání souborů bez rizika poškození.
  • Lokální zpracování v Pythonu (PIL, pywin32, pypdf) bez externích serverů.
  • Optimalizované monitorování schránky s minimální zátěží.

— Editorial Team

Advertisement 728x90

Číst dál