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
2,167 sites
34
drupal.org

Instalar

Drupal 11 v3.2.2
composer require 'drupal/filehash:^3.2'
Drupal 10, 9, 8 v2.1.1
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
Configuración de File hash /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.

Generar /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.

Limpiar /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 hashes BLAKE2b no se están generando

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.

Error al habilitar columna de algoritmo después de deshabilitarla

Ejecutar cron primero para completar la eliminación de la columna de base de datos, luego habilitar el algoritmo nuevamente.

Los hashes no se actualizan cuando se modifican los archivos

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.

Faltan hashes para archivos existentes

Visitar /admin/config/media/filehash/generate o ejecutar 'drush filehash:generate' para generar hashes para todos los archivos existentes en lote.

El formateador Identicon muestra error

El formateador Identicon requiere la librería de terceros. Ejecutar 'composer require yzalis/identicon:^2.0' para instalarla.

Error de almacenamiento de entidad al limpiar columnas

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