Limpieza Automática de Metadatos para Archivos en el Portapapeles con Python
Un demonio en segundo plano para Windows intercepta archivos en el portapapeles inmediatamente después de copiarlos y elimina sus metadatos antes de pegarlos. Esto elimina la necesidad de procesar manualmente imágenes, documentos y videos usando ExifTool o utilidades del sistema. El procesamiento ocurre localmente sin transferencia de datos externa, con protección contra corrupción y ataques de enlaces simbólicos.
Trabajando con el Portapapeles a través de la API Win32
La monitorización del portapapeles se implementa mediante un hilo ClipboardMonitor que sondea el portapapeles cada 500 ms. El formato clave es CF_HDROP, que contiene una lista de rutas de archivos.
Problemas con pywin32:
- En versiones antiguas,
GetClipboardData(CF_HDROP)devuelve un puntero aDROPFILES, requiriendoDragQueryFileWdesdeshell32.dlla través dectypes. - En versiones más recientes, devuelve una lista de cadenas, pero PyInstaller o incompatibilidades de DLL pueden romper este comportamiento.
Código de verificación:
if win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_HDROP):
file_list = win32clipboard.GetClipboardData(win32clipboard.CF_HDROP)
Validación de Rutas para Seguridad
Antes del procesamiento, las rutas pasan por comprobaciones estrictas en validate_path:
- Ruta absoluta.
- Comparación del inodo original y resolved_path (para bloquear enlaces simbólicos).
- Exclusión de directorios en
WINDIR. - Límite en el número de archivos (protección contra procesamiento masivo).
Esto previene ataques de enlaces simbólicos y el procesamiento de directorios del sistema. Adicionalmente, se verifica resolved_path.is_file() para excluir carpetas.
Arquitectura de Procesamiento: Sobrescritura In Situ
Los archivos se sobrescriben en su ruta original sin sustitución en el portapapeles—esto simplifica el manejo de bloqueos de memoria de Windows. Secuencia:
- Copiar un archivo al portapapeles.
- Detectar
CF_HDROP. - Validación y paso a
MetadataScrubber. - Sobrescritura con la versión limpia.
Limpieza de Imágenes: Reemplazo Atómico
Soporte para JPEG, PNG, TIFF, BMP. Elimina datos EXIF incluyendo geolocalización, dispositivo e información de software.
Estrategia—archivo temporal para atomicidad:
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))
Garantiza integridad: al pegar se recibe el archivo original o el limpio.
DOCX: Edición Directa de XML
python-docx cambia propiedades pero no Cambios Realizados y comentarios. Solución—analizar partes _blob:
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')
Un truco con replace elimina etiquetas de revisión en la raíz, haciendo el documento final para Word. Riesgo—tablas complejas.
PDF y Video: Soporte Básico
PDF a través de pypdf:
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.add_metadata({})
Reconstrucción sin metadatos. Video (MP4, MKV, MOV)—limpieza básica de átomos; limpieza completa requiere ffmpeg.
Problemas con la Bandeja del Sistema
Evitando notificaciones debido a errores de Shell_NotifyIcon:
- Ciclo de vida incorrecto de HWND conduce a fallos de
DestroyWindow. - Objetos COM se bloquean al cerrar Tkinter.
Solución—eliminado el módulo para estabilidad en segundo plano. Sondeo a 500 ms resulta en 0% de uso de CPU en inactividad.
Puntos Clave
- Limpieza automática de metadatos (EXIF, Cambios Realizados, geolocalización) al copiar al portapapeles.
- Protección contra ataques de enlaces simbólicos y rutas del sistema mediante validación.
- Sobrescritura atómica de archivos sin riesgo de corrupción.
- Procesamiento local en Python (PIL, pywin32, pypdf) sin servidores externos.
- Monitorización optimizada del portapapeles con sobrecarga mínima.
— Editorial Team
Aún no hay comentarios.