Saltar al contenido principal

Header

Alojamiento de archivos y descargas digitales

El sistema de alojamiento de archivos y descargas digitales de BDX.market gestiona la distribución de activos digitales no seriales, incluidos instaladores de software digital, parches de clientes de juego, paquetes de gráficos de alta resolución, guías digitales, mods de juego personalizados y documentos electrónicos.

Para proporcionar descargas rápidas y fiables a usuarios de todo Bangladés evitando el hotlinking y la distribución no autorizada, BDX.market combina almacenamiento seguro de objetos Cloudflare R2 / S3 con URL firmadas de corta duración, optimización de ancho de banda y validación de análisis de virus.


1. Arquitectura del sistema e infraestructura​

La entrega de archivos digitales se basa en una arquitectura de almacenamiento aislada que separa los servidores de la aplicación web de las transferencias de activos de alto ancho de banda. Todos los activos subidos por vendedores se almacenan en buckets privados cifrados en almacenamiento de objetos y se sirven vía nodos CDN localizados.

+------------------+ +-------------------+ +--------------------+
| Seller File Upload| ----> | Malware / Virus | ----> | Private S3 / R2 |
| (Dashboard) | | Scanner Service | | Bucket (No Public) |
+------------------+ +-------------------+ +--------------------+
|
v
+------------------+ +-------------------+ +--------------------+
| Direct Download | <---- | Short-Lived Signed| <---- | Buyer Requests File|
| From CDN Edge | | Delivery URL | | (Verified Purchase)|
+------------------+ +-------------------+ +--------------------+

Aspectos técnicos destacados​

  1. Almacenamiento privado de objetos: Los archivos se almacenan con listas estrictas de control de acceso privado (ACL). No existen URL públicas directas; todo acceso requiere verificación de firma criptográfica.
  2. Aceleración CDN en el borde: Las solicitudes de descarga se almacenan en caché y se enrutan a través de nodos de borde de Cloudflare que sirven tráfico del sur de Asia, maximizando el rendimiento de descarga en conexiones locales de banda ancha y datos móviles en Bangladés.
  3. Transferencias reanudables por fragmentos: Admite solicitudes de rango HTTP, lo que permite a los compradores en redes móviles variables pausar y reanudar descargas de archivos de varios gigabytes sin corrupción.

2. Ingesta de archivos, análisis de malware y validación​

Para mantener la seguridad de la plataforma, todos los archivos subidos por vendedores pasan por una validación automatizada rigurosa antes de estar disponibles para compra o descarga.

Formatos de archivo admitidos y límites de tamaño​

Tipo de activoExtensiones permitidasLímite de tamañoNivel de almacenamiento
Software y utilidades.exe, .msi, .zip, .7z, .tar.gz5,0 GBAlmacenamiento estándar de objetos R2
Guías y libros digitales.pdf, .epub500 MBAlmacenamiento estándar de objetos R2
Paquetes de gráficos y arte.zip, .psd, .png, .svg, .rar2,0 GBAlmacenamiento estándar de objetos R2
Mods y complementos de juego.zip, .rar, .pak10,0 GBNivel de almacenamiento de alta capacidad

Protocolo de inspección de malware y antivirus​

Cuando un vendedor sube un paquete digital:

  1. Validación de MIME y extensión: El servidor verifica los bytes mágicos del archivo para bloquear amenazas ejecutables disfrazadas (p. ej., .exe enmascarado como .pdf).
  2. Análisis automatizado con ClamAV / VirusTotal: Los archivos se analizan en busca de malware, troyanos, criptomineros y scripts maliciosos.
  3. Estado de cuarentena: Los activos subidos permanecen en status = 'pending_scan' hasta lograr la autorización de seguridad. Los activos que no superan los controles de seguridad se purgan automáticamente y la cuenta del vendedor se marca para revisión.

3. Arquitectura de almacenamiento: digital_file_assets​

Los metadatos de activos digitales, sumas de comprobación de archivos y estadísticas de entrega se registran en la tabla digital_file_assets.

CREATE TABLE `digital_file_assets` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`uuid` CHAR(36) NOT NULL UNIQUE,
`offer_id` BIGINT UNSIGNED NOT NULL,
`seller_id` BIGINT UNSIGNED NOT NULL,
`original_name` VARCHAR(255) NOT NULL,
`storage_path` VARCHAR(255) NOT NULL,
`mime_type` VARCHAR(255) NOT NULL,
`file_size_bytes` BIGINT UNSIGNED NOT NULL,
`sha256_checksum` CHAR(64) NOT NULL,
`scan_status` ENUM('pending', 'passed', 'failed') NOT NULL DEFAULT 'pending',
`download_count` INT UNSIGNED NOT NULL DEFAULT 0,
`created_at` TIMESTAMP NULL,
`updated_at` TIMESTAMP NULL,
FOREIGN KEY (`offer_id`) REFERENCES `seller_offers` (`id`) ON DELETE CASCADE,
FOREIGN KEY (`seller_id`) REFERENCES `users` (`id`)
);

Verificación de integridad vía SHA-256​

El sha256_checksum se calcula al completar la subida y se muestra en el panel de descarga del comprador. Los compradores pueden verificar localmente los archivos descargados contra este hash para garantizar cero corrupción o manipulación durante la transmisión.


4. URL firmadas, protección contra hotlinking y gestión de ancho de banda​

Para evitar compartir enlaces, raspado no autorizado y robo de ancho de banda, el acceso a archivos se basa en URL firmadas con HMAC de corta duración generadas bajo demanda.

Motor de generación de URL firmadas​

Cuando un comprador autorizado hace clic en Descargar archivo dentro de su panel de pedido (/orders/{order_id}):

  1. La aplicación comprueba el estado del pedido (status IN ('paid', 'delivered', 'completed')) y la autorización del comprador.
  2. El servidor construye una URL temporal firmada de Amazon S3 / Cloudflare R2 válida por exactamente 15 minutos.
  3. La respuesta emite una redirección 302 Found directamente al enlace de descarga del CDN de borde.
use Illuminate\Support\Facades\Storage;

public function generateDownloadUrl(DigitalFileAsset $file, User $buyer): string
{
// Verify buyer owns active order for this file asset
$hasValidOrder = BdxOrder::where('buyer_id', $buyer->id)
->where('offer_id', $file->offer_id)
->whereIn('status', ['paid', 'delivered', 'completed'])
->exists();

if (!$hasValidOrder) {
abort(403, 'Unauthorized access to digital download.');
}

// Generate temporary 15-minute signed S3/R2 URL
return Storage::disk('r2_private')->temporaryUrl(
$file->storage_path,
now()->addMinutes(15),
[
'ResponseContentDisposition' => 'attachment; filename="' . $file->original_name . '"',
'ResponseContentType' => $file->mime_type,
]
);
}

Protección contra hotlinking y vinculación por IP​

Las URL firmadas incorporan la dirección IP del comprador y la firma del token de sesión. Si un comprador intenta publicar un enlace firmado en foros públicos o redes sociales:

  • A los usuarios externos que intenten acceder al enlace se les deniega el acceso (403 Forbidden).
  • El vencimiento del enlace tras 15 minutos obliga a realizar nuevas solicitudes a través de la autenticación de BDX.

5. Historial de descargas, nuevas descargas y vencimiento de acceso​

BDX.market proporciona derechos de descarga claros manteniendo la gobernanza del almacenamiento.

Acceso de por vida a nuevas descargas​

Una vez confirmado un pedido, los compradores disfrutan de acceso ilimitado a nuevas descargas de sus activos de archivo comprados directamente desde su panel de historial de pedidos. Incluso si un vendedor retira posteriormente su anuncio de producto, los compradores históricos conservan los permisos de descarga para su versión comprada.

Control de versiones y actualizaciones de activos del vendedor​

Si un vendedor lanza una versión actualizada de una herramienta de software o libro digital (p. ej., de v1.0 a v1.2):

  • El vendedor sube una nueva revisión del paquete en su panel.
  • Los compradores existentes reciben una notificación automatizada: «Hay disponible una versión actualizada de tu activo comprado.»
  • Los registros del historial de versiones mantienen el acceso tanto a los archivos originales como a los actualizados.