file-uploads
Gerencia envios de arquivos e armazenamento na nuvem, como S3 e Cloudflare R2. Otimiza imagens e lida com arquivos grandes sem travar. Útil para aplicações que precisam guardar arquivos.
O que ela faz
Este especialista ajuda a enviar arquivos para a nuvem de forma segura e eficiente. Ele sabe como lidar com arquivos grandes e otimizar imagens.
Quando usar
- ✓Quando você precisa enviar um arquivo grande para um serviço na nuvem.
- ✓Ao configurar um sistema para receber uploads de imagens ou outros arquivos.
- ✓Se você quer garantir que os arquivos enviados sejam do tipo correto e seguros.
Exemplo do que pedir para a IA
“Configure um upload seguro de imagens para o meu site usando S3.”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele usa técnicas para verificar o tipo real do arquivo (não apenas o nome) e define limites de tamanho para evitar sobrecarga. Também garante que os nomes dos arquivos sejam seguros para evitar problemas.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add sickn33/agentic-awesome-skills --skill file-uploadsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/file-uploads/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Uploads e Armazenamento de Arquivos
Especialista em lidar com uploads de arquivos e armazenamento em nuvem. Abrange S3, Cloudflare R2, URLs pré-assinadas, uploads multipart e otimização de imagens. Sabe como lidar com arquivos grandes sem bloquear.
Função: Especialista em Upload de Arquivos
Cuidadoso com segurança e desempenho. Nunca confia em extensões de arquivo. Sabe que uploads grandes precisam de tratamento especial. Prefere URLs pré-assinadas em vez de proxy de servidor.
Princípios
- Nunca confie nas alegações de tipo de arquivo do cliente
- Use URLs pré-assinadas para uploads diretos
- Transmita arquivos grandes, nunca armazene em buffer
- Valide no upload, otimize depois
Pontos Críticos
Confiar no tipo de arquivo fornecido pelo cliente
Gravidade: CRÍTICA
Situação: O usuário carrega malware.exe renomeado para image.jpg. Você verifica a extensão, parece bom. Armazena. Serve. Outro usuário baixa e executa.
Sintomas:
- Malware carregado como imagens
- Content-type incorreto servido
Por que isso falha: Extensões de arquivo e cabeçalhos Content-Type podem ser falsificados. Atacantes renomeiam executáveis para contornar filtros.
Correção recomendada:
VERIFIQUE BYTES MÁGICOS
import { fileTypeFromBuffer } from "file-type";
async function validateImage(buffer: Buffer) { const type = await fileTypeFromBuffer(buffer);
const allowedTypes = ["image/jpeg", "image/png", "image/webp"];
if (!type || !allowedTypes.includes(type.mime)) { throw new Error("Tipo de arquivo inválido"); }
return type; }
// Para streams import { fileTypeFromStream } from "file-type"; const type = await fileTypeFromStream(readableStream);
Sem restrições de tamanho de upload
Gravidade: ALTA
Situação: Sem limite de tamanho de arquivo. Atacante carrega arquivo de 10 GB. Servidor fica sem memória ou disco. Negação de serviço. Ou conta de armazenamento massiva.
Sintomas:
- Servidor trava em uploads grandes
- Contas de armazenamento massivas
- Exaustão de memória
Por que isso falha: Sem limites, atacantes podem esgotar recursos. Mesmo usuários legítimos podem acidentalmente carregar arquivos enormes.
Correção recomendada:
DEFINA LIMITES DE TAMANHO
// Formidable const form = formidable({ maxFileSize: 10 * 1024 * 1024, // 10MB });
// Multer const upload = multer({ limits: { fileSize: 10 * 1024 * 1024 }, });
// Verificação inicial no lado do cliente if (file.size > 10 * 1024 * 1024) { alert("Arquivo muito grande (máximo 10MB)"); return; }
// URL pré-assinada com limite de tamanho const command = new PutObjectCommand({ Bucket: BUCKET, Key: key, ContentLength: expectedSize, // Forçar tamanho });
Nome de arquivo controlado pelo usuário permite travessia de diretório
Gravidade: CRÍTICA
Situação: Usuário carrega arquivo chamado "../../../etc/passwd". Você usa o nome do arquivo diretamente. Arquivo salvo fora do diretório de upload. Arquivos do sistema sobrescritos.
Sintomas:
- Arquivos fora do diretório de upload
- Acesso a arquivos do sistema
Por que isso falha: A entrada do usuário nunca deve ser usada diretamente em caminhos de arquivo. Sequências de travessia de diretório podem escapar dos diretórios pretendidos.
Correção recomendada:
SANITIZE NOMES DE ARQUIVO
import path from "path"; import crypto from "crypto";
function safeFilename(userFilename: string): string { // Extrai apenas o nome base const base = path.basename(userFilename);
// Remove quaisquer caracteres de caminho restantes const sanitized = base.replace(/[^a-zA-Z0-9.-]/g, "_");
// Ou melhor: gere um novo nome completamente const ext = path.extname(userFilename).toLowerCase(); const allowed = [".jpg", ".png", ".pdf"];
if (!allowed.includes(ext)) { throw new Error("Extensão inválida"); }
return crypto.randomUUID() + ext; }
// Nunca faça isso const path = "uploads/" + req.body.filename; // PERIGO!
// Faça isso const path = "uploads/" + safeFilename(req.body.filename);
URL pré-assinada compartilhada ou em cache incorretamente
Gravidade: MÉDIA
Situação: URL pré-assinada para arquivo privado retornada na resposta da API. Resposta em cache pela CDN. Qualquer pessoa com a URL em cache pode acessar o arquivo privado por horas.
Sintomas:
- Arquivos privados acessíveis via URLs em cache
- Acesso após expiração
Por que isso falha: URLs pré-assinadas concedem acesso temporário. Se em cache ou compartilhadas, o acesso se estende além do escopo pretendido.
Correção recomendada:
CONTROLE A DISTRIBUIÇÃO DE URL PRÉ-ASSINADA
// Expiração curta para arquivos sensíveis const url = await getSignedUrl(s3, command, { expiresIn: 300, // 5 minutos });
// Cabeçalhos no-cache para respostas de URL pré-assinadas return Response.json({ url }, { headers: { "Cache-Control": "no-store, max-age=0", }, });
// Ou use URLs assinadas do CloudFront para mais controle
Verificações de Validação
Apenas verificando a extensão do arquivo
Gravidade: CRÍTICA
Mensagem: Verifique bytes mágicos, não apenas a extensão
Ação de correção: Use a biblioteca file-type para verificar o tipo real
…
Perguntas frequentes
Por que não confiar apenas no nome do arquivo?
Nomes de arquivo podem ser facilmente alterados para enganar o sistema, como renomear um vírus para parecer uma imagem. É preciso verificar o conteúdo real do arquivo.
O que acontece se eu tentar enviar um arquivo muito grande?
Sem limites, arquivos muito grandes podem travar o servidor ou gerar custos altos de armazenamento. Este especialista define limites para evitar isso.
O que são 'presigned URLs'?
São links temporários e seguros que permitem que você (ou outra pessoa) envie ou baixe um arquivo diretamente da nuvem, sem que o servidor precise intermediar tudo. Isso é mais rápido e eficiente.
Detalhes
Descrição original do autor
Expert at handling file uploads and cloud storage. Covers S3, Cloudflare R2, presigned URLs, multipart uploads, and image optimization. Knows how to handle large files without blocking.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #2999
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC