File Hash
Genera y almacena hashes criptográficos para cada archivo subido al sitio, permitiendo la verificación de archivos, detección de duplicados y almacenamiento direccionable por contenido.
filehash
Instalar
composer require 'drupal/filehash:^3.2'
composer require 'drupal/filehash:^2.1'
Overview
El módulo File Hash genera y almacena hashes criptográficos para cada archivo subido a un sitio Drupal. Los hashes de archivos subidos, comúnmente encontrados en sitios desde archive.org hasta wikileaks.org, permiten identificar archivos de manera única, detectar archivos duplicados y verificar copias contra la fuente original.
El módulo soporta 18 algoritmos de hash en múltiples familias criptográficas: BLAKE2b (variantes de 128, 160, 224, 256, 384, 512 bits), MD5, SHA-1, familia SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256) y familia SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512). Los valores de hash se almacenan como campos base en las entidades File, haciéndolos disponibles para Views, tokens, plantillas y consultas de entidades.
Las capacidades clave incluyen prevención de archivos duplicados tanto a nivel de sitio como por campo, generación de hash diferida o en lote para archivos existentes, almacenamiento opcional de hashes de archivos originales (útil cuando los archivos se procesan después de la subida) y representación visual de hash mediante Identicons. El módulo se integra con Views para filtrado de archivos duplicados y proporciona comandos Drush para operaciones en línea de comandos.
Features
- Genera hashes criptográficos automáticamente cuando se suben archivos
- Soporta 18 algoritmos de hash incluyendo las familias BLAKE2b, MD5, SHA-1, SHA-2 y SHA-3
- Almacena hashes como campos base en entidades File para fácil acceso vía Views, plantillas y consultas de entidades
- Detección y prevención de archivos duplicados tanto a nivel de sitio como por campo
- Almacenamiento opcional de hashes de archivos originales antes de cualquier modificación de procesamiento
- Opción de generación de hash diferida para auto-generar hashes faltantes cuando se cargan archivos
- Generación de hash en lote para archivos preexistentes vía interfaz de administración o comando Drush
- Funcionalidad de limpieza para eliminar columnas de base de datos de algoritmos deshabilitados
- Soporte de Token para hashes de archivos incluyendo tokens pairtree para almacenamiento direccionable por contenido
- Integración con Views con filtro de archivos duplicados
- Formateador Identicon para representación visual de hash (requiere librería de terceros)
- Formateador de tabla para mostrar archivos con sus valores de hash
- Soporte de consulta de entidades para buscar archivos por valor de hash
- Comandos Drush para generar hashes, limpiar y reportar duplicados
- Soporte de migración desde Drupal 7
Use Cases
Verificación e Integridad de Archivos
Usar hashes de archivos para verificar que las copias descargadas coincidan con el original. Mostrar el hash en páginas de descarga para que los usuarios puedan verificar la integridad del archivo usando herramientas de línea de comandos como sha256sum o b2sum.
Prevención de Archivos Duplicados
Habilitar la configuración de dedupe para evitar que los usuarios suban archivos que ya existen en el sitio. Útil para reducir costos de almacenamiento y asegurar referencias canónicas de archivos. Puede habilitarse a nivel de sitio o por campo.
Almacenamiento Direccionable por Contenido
Usar tokens pairtree ([file:filehash-sha256-pair-1]/[file:filehash-sha256-pair-2]) para organizar archivos en directorios basados en su hash. Por ejemplo, un archivo con hash SHA-256 e3b0c44298fc1c149... se almacenaría en files/e3/b0/.
Encontrar Archivos Duplicados
Usar el comando de reporte de Drush (drush filehash:report) o crear una Vista con el filtro 'Tiene hash duplicado' para identificar archivos duplicados en el sitio para limpieza o consolidación.
Búsqueda de Archivos por Hash
Usar consultas de entidad para encontrar archivos por su valor de hash. Útil para localizar programáticamente archivos específicos o verificar si ya existe un archivo con un hash particular.
Registro de Auditoría y Análisis Forense
Almacenar hashes de archivos originales separadamente de los hashes actuales cuando los archivos se procesan (ej., redimensionamiento de imágenes). Esto permite verificar tanto el archivo original subido como su estado actual.
Tips
- Para mejor rendimiento, habilitar solo los algoritmos de hash que realmente necesita
- SHA-256 es una buena opción de propósito general que equilibra seguridad y compatibilidad
- Usar SHA-512/256 para mejor rendimiento en sistemas de 64 bits manteniendo seguridad de 256 bits
- Los algoritmos BLAKE2b ofrecen rendimiento más rápido que SHA-2 pero requieren la extensión PHP Sodium
- La configuración autohash puede impactar el rendimiento en sitios con muchos archivos - considerar usar generación en lote en su lugar
- Usar modo dedupe estricto si necesita evitar que el mismo archivo se suba simultáneamente por múltiples usuarios
- Los tokens pairtree son útiles para distribuir archivos entre directorios para evitar limitaciones del sistema de archivos con muchos archivos en una carpeta
Technical Details
Admin Pages 3
/admin/config/media/filehash
Configurar los ajustes de file hash incluyendo qué algoritmos de hash usar, comportamiento de detección de duplicados y opciones de generación de hash.
/admin/config/media/filehash/generate
Generar hashes de archivos en lote para todos los archivos subidos previamente. Esto es útil al habilitar el módulo en un sitio con archivos existentes o al habilitar nuevos algoritmos de hash.
/admin/config/media/filehash/clean
Eliminar columnas de base de datos para algoritmos de hash deshabilitados. Esto elimina permanentemente los datos de hash para algoritmos que han sido deshabilitados.
Hooks 11
hook_entity_base_field_info
Añade campos base de valores de hash a las entidades File para cada algoritmo habilitado. Los campos se almacenan como tipo de campo 'filehash' con columnas varchar_ascii indexadas.
hook_entity_storage_load
Genera hashes faltantes cuando se cargan archivos, si la configuración autohash está habilitada.
hook_ENTITY_TYPE_create
Se llama cuando se crea una nueva entidad file. Establece valores de hash iniciales incluyendo hash original si está configurado.
hook_ENTITY_TYPE_presave
Se llama antes de guardar una entidad file. Genera hashes faltantes o regenera todos los hashes basado en la configuración de rehash.
hook_field_widget_single_element_form_alter
Añade validador de subida FileHashDedupe a widgets de campos file/image cuando dedupe está habilitado en la configuración del campo.
hook_form_FORM_ID_alter
Añade configuración de dedupe al formulario de configuración de campo file, permitiendo configuración de detección de duplicados por campo.
hook_views_data_alter
Añade filtro 'Tiene hash duplicado' para cada algoritmo habilitado a la tabla file_managed de Views.
hook_token_info
Proporciona información de token para hashes de archivos incluyendo tokens de hash completo y pairtree.
hook_tokens
Genera reemplazos de token para valores de hash de archivos y componentes pairtree.
hook_help
Proporciona texto de ayuda para el módulo en páginas de administración.
hook_requirements
Verifica el estado de la extensión PHP Sodium cuando los algoritmos BLAKE2b están habilitados.
Drush Commands 3
drush filehash:generate
Genera hashes para todos los archivos existentes que no tienen valores de hash. Se ejecuta como un proceso por lotes.
drush filehash:clean
Elimina columnas de base de datos para algoritmos de hash deshabilitados. Elimina permanentemente los datos de hash para algoritmos deshabilitados.
drush filehash:report
Imprime una lista de archivos duplicados consultando la base de datos para archivos con hashes duplicados.
Troubleshooting 6
Los algoritmos BLAKE2b requieren la extensión PHP Sodium. Verificar Administración > Informes > Informe de estado para el estado de la extensión Sodium. Instalar la extensión o usar el polyfill paragonie/sodium_compat.
Ejecutar cron primero para completar la eliminación de la columna de base de datos, luego habilitar el algoritmo nuevamente.
Habilitar la configuración 'Siempre recalcular hash del archivo al guardar' para regenerar hashes cada vez que se guardan archivos. Por defecto, los hashes solo se generan una vez.
Visitar /admin/config/media/filehash/generate o ejecutar 'drush filehash:generate' para generar hashes para todos los archivos existentes en lote.
El formateador Identicon requiere la librería de terceros. Ejecutar 'composer require yzalis/identicon:^2.0' para instalarla.
Intentar ejecutar cron antes de proceder. El error puede ocurrir si la eliminación del campo aún está en progreso.
Security Notes 4
- Habilitar la detección de duplicados tiene implicaciones de privacidad - los usuarios pueden determinar si un archivo específico existe en el sitio intentando subirlo
- MD5 y SHA-1 se consideran criptográficamente débiles y solo deben usarse para compatibilidad con sistemas que los requieran
- Para aplicaciones sensibles a la seguridad, usar SHA-256 o algoritmos más fuertes
- El módulo valida hashes de archivos durante la subida para prevenir ataques de archivos duplicados