Hospedagem de arquivos e downloads digitais
O sistema de hospedagem de arquivos e downloads digitais na BDX.market gerencia a distribuição de ativos digitais não seriais, incluindo instaladores de software digital, patches de clientes de jogos, pacotes de gráficos em alta resolução, guias digitais, mods de jogos personalizados e documentos eletrônicos.
Para oferecer downloads rápidos e confiáveis a usuários em todo o Bangladesh, evitando hotlinking e distribuição não autorizada, a BDX.market combina armazenamento seguro de objetos Cloudflare R2 / S3 com URLs assinadas de validade curta, otimização de banda e validação por varredura antivírus.
1. Arquitetura do sistema e infraestrutura
A entrega de arquivos digitais depende de uma arquitetura de armazenamento isolada que separa os servidores do aplicativo web das transferências de ativos de alta banda. Todos os ativos enviados por vendedores são armazenados em buckets privados criptografados no armazenamento de objetos e servidos via nós de 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)|
+------------------+ +-------------------+ +--------------------+
Destaques técnicos
- Armazenamento privado de objetos: Os arquivos são armazenados com listas rígidas de controle de acesso privado (ACLs). URLs públicas diretas não existem; todo acesso exige verificação de assinatura criptográfica.
- Aceleração de CDN de borda: Solicitações de download são armazenadas em cache e roteadas por nós de borda da Cloudflare que atendem o tráfego do sul da Ásia, maximizando a taxa de download em conexões locais de banda larga e dados móveis em Bangladesh.
- Transferências retomáveis em partes: Suporte a solicitações HTTP Range, permitindo que compradores em redes móveis variáveis pausem e retomem downloads de arquivos de vários gigabytes sem corrupção.
2. Entrada de arquivos, varredura de malware e validação
Para manter a segurança da plataforma, todos os arquivos enviados por vendedores passam por validação automatizada rigorosa antes de ficarem disponíveis para compra ou download.
Formatos de arquivo aceitos e limites de tamanho
| Tipo de ativo | Extensões permitidas | Limite de tamanho | Camada de armazenamento |
|---|---|---|---|
| Software e utilitários | .exe, .msi, .zip, .7z, .tar.gz | 5,0 GB | Armazenamento padrão de objetos R2 |
| Guias e livros digitais | .pdf, .epub | 500 MB | Armazenamento padrão de objetos R2 |
| Pacotes de gráficos e arte | .zip, .psd, .png, .svg, .rar | 2,0 GB | Armazenamento padrão de objetos R2 |
| Mods e complementos de jogos | .zip, .rar, .pak | 10,0 GB | Camada de armazenamento de alta capacidade |
Protocolo de inspeção de malware e antivírus
Quando um vendedor envia um pacote digital:
- Validação de MIME e extensão: O servidor verifica os bytes mágicos do arquivo para bloquear ameaças executáveis disfarçadas (por ex.,
.exemascarado como.pdf). - Varredura automatizada ClamAV / VirusTotal: Os arquivos são verificados contra malware, trojans, criptomineradores e scripts maliciosos.
- Estado de quarentena: Ativos enviados permanecem em
status = 'pending_scan'até obter liberação de segurança. Ativos reprovados nas verificações de segurança são eliminados automaticamente, e a conta do vendedor é sinalizada para revisão.
3. Arquitetura de armazenamento: digital_file_assets
Metadados de ativos digitais, checksums de arquivos e estatísticas de entrega são registrados na tabela 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`)
);
Verificação de integridade via SHA-256
O sha256_checksum é calculado ao concluir o envio e exibido no painel de download do comprador. Os compradores podem verificar localmente os arquivos baixados contra esse hash para garantir zero corrupção ou adulteração durante a transmissão.
4. URLs assinadas, proteção contra hotlink e gestão de banda
Para evitar compartilhamento de links, raspagem não autorizada e roubo de banda, o acesso a arquivos depende de URLs curtas assinadas por HMAC, geradas sob demanda.
Mecanismo de geração de URL assinada
Quando um comprador autorizado clica em Baixar arquivo dentro do painel do pedido (/orders/{order_id}):
- O aplicativo verifica o estado do pedido (
status IN ('paid', 'delivered', 'completed')) e a autorização do comprador. - O servidor constrói uma URL temporária assinada do Amazon S3 / Cloudflare R2 válida por exatamente 15 minutos.
- A resposta emite um redirecionamento
302 Founddiretamente para o link de download do CDN de borda.
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,
]
);
}
Proteção contra hotlink e vínculo de IP
As URLs assinadas incorporam o endereço IP do comprador e a assinatura do token de sessão. Se um comprador tentar publicar um link assinado em fóruns públicos ou redes sociais:
- Usuários externos que tentarem acessar o link terão o acesso negado (
403 Forbidden). - A expiração do link após 15 minutos força novas solicitações pela autenticação da BDX.
5. Histórico de downloads, novos downloads e expiração de acesso
A BDX.market oferece direitos claros de download mantendo a governança de armazenamento.
Acesso vitalício a novos downloads
Assim que um pedido é confirmado, os compradores têm acesso ilimitado a novos downloads dos arquivos comprados diretamente no painel de histórico de pedidos. Mesmo que o vendedor despublique o anúncio depois, compradores históricos mantêm as permissões de download da versão adquirida.
Versionamento e atualizações de ativos do vendedor
Se um vendedor lançar uma versão atualizada de uma ferramenta de software ou livro digital (por ex., v1.0 para v1.2):
- O vendedor envia uma nova revisão do pacote no painel.
- Compradores existentes recebem uma notificação automatizada: "Há uma versão atualizada do seu ativo adquirido disponível."
- Os registros de histórico de versões mantêm acesso aos arquivos originais e atualizados.