Pular para o conteúdo

Comandos Pompelmi

Comandos abrangentes de escaneamento de segurança de upload de arquivo Pompelmi para proteção de aplicação Node.js.

ComandoDescrição
npm install pompelmiInstalar Pompelmi via npm
yarn add pompelmiInstalar Pompelmi via Yarn
pnpm add pompelmiInstalar Pompelmi via pnpm
bun add pompelmiInstalar Pompelmi via Bun
const express = require('express');
const { createScanner } = require('pompelmi');

const app = express();
const scanner = createScanner({
  maxFileSize: '10mb',
  allowedExtensions: ['.pdf', '.png', '.jpg', '.docx'],
});

app.post('/upload', scanner.middleware(), (req, res) => {
  res.json({ files: req.files });
});
FrameworkDescrição
pompelmi/expressAdaptador de middleware Express.js
pompelmi/koaAdaptador de middleware Koa
pompelmi/nextAdaptador de rota de API Next.js
pompelmi/nitroAdaptador Nuxt/Nitro
pompelmi/fastifyAdaptador de plugin Fastify
OpçãoDescrição
maxFileSize: '10mb'Tamanho máximo de arquivo permitido
allowedExtensions: ['.pdf', '.png']Lista branca de extensões de arquivo permitidas
blockedExtensions: ['.exe', '.bat']Lista negra de extensões bloqueadas
allowedMimeTypes: ['image/png']Lista branca de tipos MIME permitidos
scanTimeout: 30000Timeout de scan em milissegundos
tempDir: '/tmp/pompelmi'Diretório temporário para scanning
preserveOriginalName: trueManter nome de arquivo original
OpçãoDescrição
yara: { enabled: true }Habilitar escaneamento de regra YARA
yara: { rules: './rules/' }Caminho para diretório de regras YARA customizadas
yara: { builtinRules: true }Usar regras de detecção de malware built-in
yara: { timeout: 10000 }Timeout de scan YARA
Arquivo de regras YARA customizadaEscrever arquivos .yar para detecção customizada
OpçãoDescrição
archive: { enabled: true }Habilitar inspeção de arquivo
archive: { maxDepth: 3 }Profundidade máxima de recursão para arquivos aninhados
archive: { maxFiles: 100 }Máximo de arquivos dentro de arquivo
archive: { maxRatio: 100 }Relação de compressão máxima (proteção contra zip bomb)
archive: { maxSize: '100mb' }Tamanho total máximo extraído
archive: { formats: ['zip', 'tar', 'gz'] }Formatos de arquivo suportados
PolíticaDescrição
policy: 'strict'Bloquear qualquer coisa suspeita (recomendado)
policy: 'moderate'Bloquear malware conhecido, avisar em suspeito
policy: 'permissive'Bloquear apenas malware confirmado
Função de política customizadaDefinir lógica customizada de aceitar/rejeitar
VerificaçãoDescrição
Validação de extensãoVerificar extensão de arquivo contra lista permitida
Detecção de magic byteVerificar tipo de arquivo por bytes de conteúdo
Verificação de tipo MIMEVerificação de tipo MIME lado do servidor
Detecção de extensão duplaPegar truques file.pdf.exe
Detecção de null byteBloquear injeção de null byte em nomes de arquivo
Incompatibilidade de conteúdoDetectar incompatibilidades entre extensão e conteúdo
EventoDescrição
scanner.on('scan:start', fn)Disparado quando scan começa
scanner.on('scan:complete', fn)Disparado quando scan termina
scanner.on('scan:reject', fn)Disparado quando arquivo é rejeitado
scanner.on('scan:accept', fn)Disparado quando arquivo passa em todas as verificações
scanner.on('scan:error', fn)Disparado em erro de scanning
scanner.on('yara:match', fn)Disparado quando regra YARA corresponde
PropriedadeDescrição
result.safeBooleano: arquivo passou em todas as verificações
result.threatsArray de ameaças detectadas
result.mimeTypeTipo MIME detectado
result.extensionExtensão de arquivo
result.sizeTamanho de arquivo em bytes
result.hashHash SHA-256 do arquivo
result.scanTimeTempo levado para scan (ms)
result.yaraMatchesCorrespondências de regra YARA (se habilitado)
const { createScanner } = require('pompelmi');

const scanner = createScanner({
  maxFileSize: '5mb',
  allowedExtensions: ['.pdf', '.png', '.jpg'],
  yara: { enabled: true, builtinRules: true },
  archive: { enabled: true, maxDepth: 2 },
  policy: 'strict',
});

// Como middleware
app.post('/upload', scanner.middleware(), handleUpload);

// Scanning manual
app.post('/upload', async (req, res) => {
  const result = await scanner.scan(req.file.buffer, {
    filename: req.file.originalname,
  });

  if (!result.safe) {
    return res.status(400).json({
      error: 'File rejected',
      threats: result.threats,
    });
  }

  // Processar arquivo seguro...
});
const { createScanner } = require('pompelmi/koa');

const scanner = createScanner({
  maxFileSize: '10mb',
  allowedMimeTypes: ['application/pdf', 'image/*'],
});

router.post('/upload', scanner.middleware(), async (ctx) => {
  ctx.body = { files: ctx.request.files };
});
import { createScanner } from 'pompelmi/next';

const scanner = createScanner({
  maxFileSize: '5mb',
  allowedExtensions: ['.pdf', '.png'],
});

export default scanner.handler(async (req, res) => {
  const files = req.files;
  res.json({ uploaded: files.length });
});
ComandoDescrição
npx pompelmi scan <file>Escanear arquivo único
npx pompelmi scan ./uploads/Escanear diretório de arquivos
npx pompelmi scan --yara <file>Escanear com regras YARA
npx pompelmi scan --json <file>Saída de resultados como JSON
npx pompelmi rules listListar regras YARA disponíveis
npx pompelmi rules updateAtualizar regras YARA built-in
DicaDescrição
Usar política strict em produçãoRejeitar qualquer coisa suspeita
Habilitar regras YARADetectar assinaturas de malware conhecido
Definir limites de arquivoPrevenir zip bombs e payloads aninhados
Validar tipos MIME no servidorNão confiar em Content-Type do cliente
Verificar extensões duplasBloquear padrões file.pdf.exe
Definir limites de tamanho razoáveisPrevenir esgotamento de recursos
Escanear na memóriaEvitar escrever arquivos não confiáveis no disco
Monitorar eventos de scanRegistrar e alertar em rejeições
Atualizar regras YARA regularmenteManter-se atualizado com inteligência de ameaças
Usar listas de permissão sobre listas negrasWhitelist é mais seguro que blacklist