Salta ai contenuti

Comandi Pompelmi

Comandi completi di Pompelmi per la scansione della sicurezza dei caricamenti di file per la protezione delle applicazioni Node.js.

ComandoDescrizione
npm install pompelmiInstalla Pompelmi tramite npm
yarn add pompelmiInstalla Pompelmi tramite Yarn
pnpm add pompelmiInstalla Pompelmi tramite pnpm
bun add pompelmiInstalla Pompelmi tramite 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 });
});
FrameworkDescrizione
pompelmi/expressAdattatore middleware Express.js
pompelmi/koaAdattatore middleware Koa
pompelmi/nextAdattatore route API Next.js
pompelmi/nitroAdattatore Nuxt/Nitro
pompelmi/fastifyAdattatore plugin Fastify
OpzioneDescrizione
maxFileSize: '10mb'Dimensione massima dei file consentita
allowedExtensions: ['.pdf', '.png']Whitelist delle estensioni di file consentite
blockedExtensions: ['.exe', '.bat']Blacklist delle estensioni di file bloccate
allowedMimeTypes: ['image/png']Whitelist dei tipi MIME consentiti
scanTimeout: 30000Timeout della scansione in millisecondi
tempDir: '/tmp/pompelmi'Directory temporanea per la scansione
preserveOriginalName: trueMantieni il nome file originale
OpzioneDescrizione
yara: { enabled: true }Abilita la scansione delle regole YARA
yara: { rules: './rules/' }Percorso della directory delle regole YARA personalizzate
yara: { builtinRules: true }Usa le regole predefinite di rilevamento malware
yara: { timeout: 10000 }Timeout della scansione YARA
File regole YARA personalizzateScrivi file .yar per il rilevamento personalizzato
OpzioneDescrizione
archive: { enabled: true }Abilita l’ispezione dell’archivio
archive: { maxDepth: 3 }Profondità massima di ricorsione per archivi annidati
archive: { maxFiles: 100 }Numero massimo di file all’interno dell’archivio
archive: { maxRatio: 100 }Rapporto di compressione massimo (protezione da zip bomb)
archive: { maxSize: '100mb' }Dimensione totale massima estratta
archive: { formats: ['zip', 'tar', 'gz'] }Formati di archivio supportati
PoliticaDescrizione
policy: 'strict'Blocca qualsiasi cosa sospetta (consigliato)
policy: 'moderate'Blocca il malware noto, avvisa sul sospetto
policy: 'permissive'Blocca solo il malware confermato
Funzione politica personalizzataDefinisci la tua logica di accettazione/rifiuto
ControlloDescrizione
Validazione dell’estensioneVerifica l’estensione del file rispetto alla whitelist
Rilevamento del byte magicoVerifica il tipo di file mediante i byte di contenuto
Verifica del tipo MIMEControllo del tipo MIME lato server
Rilevamento dell’estensione doppiaCattura i trucchi file.pdf.exe
Rilevamento del byte nullBlocca l’iniezione del byte null nei nomi file
Mancata corrispondenza Content-TypeRileva mancate corrispondenze estensione/contenuto
EventoDescrizione
scanner.on('scan:start', fn)Attivato all’inizio della scansione
scanner.on('scan:complete', fn)Attivato al termine della scansione
scanner.on('scan:reject', fn)Attivato quando il file viene rifiutato
scanner.on('scan:accept', fn)Attivato quando il file supera tutti i controlli
scanner.on('scan:error', fn)Attivato in caso di errore di scansione
scanner.on('yara:match', fn)Attivato quando una regola YARA corrisponde
ProprietàDescrizione
result.safeBooleano: il file ha superato tutti i controlli
result.threatsArray di minacce rilevate
result.mimeTypeTipo MIME rilevato
result.extensionEstensione del file
result.sizeDimensione del file in byte
result.hashHash SHA-256 del file
result.scanTimeTempo impiegato per la scansione (ms)
result.yaraMatchesCorrispondenze della regola YARA (se abilitate)
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',
});

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

// Scansione manuale
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,
    });
  }

  // Elabora il file sicuro...
});
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 });
});
ComandoDescrizione
npx pompelmi scan <file>Scansiona un singolo file
npx pompelmi scan ./uploads/Scansiona una directory di file
npx pompelmi scan --yara <file>Scansiona con le regole YARA
npx pompelmi scan --json <file>Esporta i risultati come JSON
npx pompelmi rules listElenca le regole YARA disponibili
npx pompelmi rules updateAggiorna le regole YARA predefinite
SuggerimentoDescrizione
Usa una politica ristretta in produzioneRifiuta qualsiasi cosa sospetta
Abilita le regole YARARileva le firme di malware conosciute
Imposta i limiti dell’archivioPrevieni i zip bomb e i payload annidati
Convalida i tipi MIME lato serverNon fidarti del Content-Type del client
Verifica le estensioni doppieBlocca i modelli file.pdf.exe
Imposta i limiti di dimensione ragionevoliPrevieni l’esaurimento delle risorse
Scansiona in memoriaEvita di scrivere file non affidabili su disco
Monitora gli eventi di scansioneRegistra e avvisa sui rifiuti
Aggiorna regolarmente le regole YARARimani aggiornato con l’intelligence sulle minacce
Usa le whitelist rispetto alle blacklistLa lista bianca è più sicura della blacklist