Ir al contenido

Comandos de Pompelmi

Comandos completos de escaneo de seguridad de carga de archivos Pompelmi para la protección de aplicaciones Node.js.

ComandoDescripción
npm install pompelmiInstalar Pompelmi vía npm
yarn add pompelmiInstalar Pompelmi vía Yarn
pnpm add pompelmiInstalar Pompelmi vía pnpm
bun add pompelmiInstalar Pompelmi vía 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 });
});
FrameworkDescripción
pompelmi/expressAdaptador de middleware Express.js
pompelmi/koaAdaptador de middleware Koa
pompelmi/nextAdaptador de ruta de API Next.js
pompelmi/nitroAdaptador Nuxt/Nitro
pompelmi/fastifyAdaptador de plugin Fastify
OpciónDescripción
maxFileSize: '10mb'Tamaño máximo de archivo permitido
allowedExtensions: ['.pdf', '.png']Lista blanca de extensiones de archivo permitidas
blockedExtensions: ['.exe', '.bat']Lista negra de extensiones bloqueadas
allowedMimeTypes: ['image/png']Lista blanca de tipos MIME permitidos
scanTimeout: 30000Tiempo de espera de escaneo en milisegundos
tempDir: '/tmp/pompelmi'Directorio temporal para escaneo
preserveOriginalName: trueMantener nombre de archivo original
OpciónDescripción
yara: { enabled: true }Habilitar escaneo de reglas YARA
yara: { rules: './rules/' }Ruta al directorio de reglas YARA personalizadas
yara: { builtinRules: true }Usar reglas de detección de malware incorporadas
yara: { timeout: 10000 }Tiempo de espera de escaneo YARA
Custom YARA rules fileEscribir archivos .yar para detección personalizada
OpciónDescripción
archive: { enabled: true }Habilitar inspección de archivo
archive: { maxDepth: 3 }Profundidad de recursión máxima para archivos anidados
archive: { maxFiles: 100 }Archivos máximos dentro del archivo
archive: { maxRatio: 100 }Relación de compresión máxima (protección contra bomba zip)
archive: { maxSize: '100mb' }Tamaño total máximo extraído
archive: { formats: ['zip', 'tar', 'gz'] }Formatos de archivo compatibles
PolíticaDescripción
policy: 'strict'Bloquear cualquier cosa sospechosa (recomendado)
policy: 'moderate'Bloquear malware conocido, advertir sobre sospechoso
policy: 'permissive'Bloquear solo malware confirmado
Custom policy functionDefinir su propia lógica de aceptar/rechazar
VerificaciónDescripción
Extension validationVerificar extensión de archivo contra lista blanca
Magic byte detectionVerificar tipo de archivo por bytes de contenido
MIME type verificationVerificación de tipo MIME del lado del servidor
Double extension detectionAtrapar trucos file.pdf.exe
Null byte detectionBloquear inyección de byte nulo en nombres de archivo
Content-Type mismatchDetectar desajustes de extensión/contenido
EventoDescripción
scanner.on('scan:start', fn)Se dispara cuando comienza el escaneo
scanner.on('scan:complete', fn)Se dispara cuando termina el escaneo
scanner.on('scan:reject', fn)Se dispara cuando se rechaza un archivo
scanner.on('scan:accept', fn)Se dispara cuando un archivo pasa todas las verificaciones
scanner.on('scan:error', fn)Se dispara en error de escaneo
scanner.on('yara:match', fn)Se dispara cuando coincide una regla YARA
PropiedadDescripción
result.safeBoolean: archivo pasó todas las verificaciones
result.threatsArray de amenazas detectadas
result.mimeTypeTipo MIME detectado
result.extensionExtensión de archivo
result.sizeTamaño del archivo en bytes
result.hashHash SHA-256 del archivo
result.scanTimeTiempo dedicado al escaneo (ms)
result.yaraMatchesCoincidencias de regla YARA (si está 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',
});

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

// Manual scanning
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,
    });
  }

  // Process safe file...
});
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 });
});
ComandoDescripción
npx pompelmi scan <file>Escanear un archivo único
npx pompelmi scan ./uploads/Escanear directorio de archivos
npx pompelmi scan --yara <file>Escanear con reglas YARA
npx pompelmi scan --json <file>Resultados de salida como JSON
npx pompelmi rules listListar reglas YARA disponibles
npx pompelmi rules updateActualizar reglas YARA incorporadas
ConsejoDescripción
Use strict policy in productionRechazar cualquier cosa sospechosa
Enable YARA rulesDetectar firmas de malware conocidas
Set archive limitsPrevenir bombas zip y cargas anidadas
Validate MIME types server-sideNo confiar en Content-Type del cliente
Check double extensionsBloquear patrones file.pdf.exe
Set reasonable size limitsPrevenir agotamiento de recursos
Scan in memoryEvitar escribir archivos que no son de confianza en disco
Monitor scan eventsRegistrar y alertar sobre rechazos
Update YARA rules regularlyManténgase actualizado con inteligencia de amenazas
Use allowlists over blocklistsLa lista blanca es más segura que la lista negra