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
- 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.
- 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.
- 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 activo | Extensiones permitidas | Límite de tamaño | Nivel de almacenamiento |
|---|---|---|---|
| Software y utilidades | .exe, .msi, .zip, .7z, .tar.gz | 5,0 GB | Almacenamiento estándar de objetos R2 |
| Guías y libros digitales | .pdf, .epub | 500 MB | Almacenamiento estándar de objetos R2 |
| Paquetes de gráficos y arte | .zip, .psd, .png, .svg, .rar | 2,0 GB | Almacenamiento estándar de objetos R2 |
| Mods y complementos de juego | .zip, .rar, .pak | 10,0 GB | Nivel de almacenamiento de alta capacidad |
Protocolo de inspección de malware y antivirus
Cuando un vendedor sube un paquete digital:
- Validación de MIME y extensión: El servidor verifica los bytes mágicos del archivo para bloquear amenazas ejecutables disfrazadas (p. ej.,
.exeenmascarado como.pdf). - Análisis automatizado con ClamAV / VirusTotal: Los archivos se analizan en busca de malware, troyanos, criptomineros y scripts maliciosos.
- 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}):
- La aplicación comprueba el estado del pedido (
status IN ('paid', 'delivered', 'completed')) y la autorización del comprador. - El servidor construye una URL temporal firmada de Amazon S3 / Cloudflare R2 válida por exactamente 15 minutos.
- La respuesta emite una redirección
302 Founddirectamente 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.