Aller au contenu

Commandes Pompelmi

Commandes complètes de l’outil Pompelmi de balayage de sécurité des téléchargements de fichiers pour la protection des applications Node.js.

CommandeDescription
npm install pompelmiInstaller Pompelmi via npm
yarn add pompelmiInstaller Pompelmi via Yarn
pnpm add pompelmiInstaller Pompelmi via pnpm
bun add pompelmiInstaller 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 });
});
FrameworkDescription
pompelmi/expressAdaptateur de middleware Express.js
pompelmi/koaAdaptateur de middleware Koa
pompelmi/nextAdaptateur de route API Next.js
pompelmi/nitroAdaptateur Nuxt/Nitro
pompelmi/fastifyAdaptateur de plugin Fastify
OptionDescription
maxFileSize: '10mb'Taille maximale de fichier autorisée
allowedExtensions: ['.pdf', '.png']Liste blanche des extensions autorisées
blockedExtensions: ['.exe', '.bat']Liste noire des extensions bloquées
allowedMimeTypes: ['image/png']Liste blanche des types MIME autorisés
scanTimeout: 30000Délai d’expiration du scan en millisecondes
tempDir: '/tmp/pompelmi'Répertoire temporaire pour le scanning
preserveOriginalName: trueConserver le nom de fichier original
OptionDescription
yara: { enabled: true }Activer le scan des règles YARA
yara: { rules: './rules/' }Chemin vers le répertoire des règles YARA personnalisées
yara: { builtinRules: true }Utiliser les règles de détection de malwares intégrées
yara: { timeout: 10000 }Délai d’expiration du scan YARA
Custom YARA rules fileÉcrire des fichiers .yar pour la détection personnalisée
OptionDescription
archive: { enabled: true }Activer l’inspection d’archives
archive: { maxDepth: 3 }Profondeur maximale de récursion pour les archives imbriquées
archive: { maxFiles: 100 }Nombre maximal de fichiers dans une archive
archive: { maxRatio: 100 }Rapport de compression maximal (protection contre les bombes zip)
archive: { maxSize: '100mb' }Taille totale maximale extraite
archive: { formats: ['zip', 'tar', 'gz'] }Formats d’archives supportés
PolitiqueDescription
policy: 'strict'Bloquer tout ce qui est suspect (recommandé)
policy: 'moderate'Bloquer les malwares connus, avertir sur les suspects
policy: 'permissive'Bloquer uniquement les malwares confirmés
Custom policy functionDéfinir votre propre logique accepter/rejeter
VérificationDescription
Extension validationVérifier l’extension contre la liste blanche
Magic byte detectionVérifier le type de fichier par octets de contenu
MIME type verificationVérification du type MIME côté serveur
Double extension detectionDétecter les astuces file.pdf.exe
Null byte detectionBloquer l’injection d’octets nuls dans les noms
Content-Type mismatchDétecter les incompatibilités extension/contenu
ÉvénementDescription
scanner.on('scan:start', fn)Déclenché au début du scan
scanner.on('scan:complete', fn)Déclenché à la fin du scan
scanner.on('scan:reject', fn)Déclenché quand le fichier est rejeté
scanner.on('scan:accept', fn)Déclenché quand le fichier passe tous les contrôles
scanner.on('scan:error', fn)Déclenché lors d’une erreur de scanning
scanner.on('yara:match', fn)Déclenché quand une règle YARA correspond
PropriétéDescription
result.safeBooléen: le fichier a passé tous les contrôles
result.threatsTableau des menaces détectées
result.mimeTypeType MIME détecté
result.extensionExtension du fichier
result.sizeTaille du fichier en octets
result.hashHash SHA-256 du fichier
result.scanTimeTemps de scan (ms)
result.yaraMatchesCorrespondances de règles YARA (si activées)
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 });
});
CommandeDescription
npx pompelmi scan <file>Scanner un seul fichier
npx pompelmi scan ./uploads/Scanner un répertoire de fichiers
npx pompelmi scan --yara <file>Scanner avec les règles YARA
npx pompelmi scan --json <file>Afficher les résultats en JSON
npx pompelmi rules listLister les règles YARA disponibles
npx pompelmi rules updateMettre à jour les règles YARA intégrées
ConseilDescription
Use strict policy in productionRejeter tout ce qui est suspect
Enable YARA rulesDétecter les signatures de malwares connues
Set archive limitsPrévenir les bombes zip et les charges imbriquées
Validate MIME types server-sideNe pas faire confiance au Content-Type du client
Check double extensionsBloquer les motifs file.pdf.exe
Set reasonable size limitsPrévenir l’épuisement des ressources
Scan in memoryÉviter d’écrire les fichiers non fiables sur le disque
Monitor scan eventsEnregistrer et alerter sur les rejets
Update YARA rules regularlyRester à jour avec l’intelligence des menaces
Use allowlists over blocklistsLa liste blanche est plus sûre que la liste noire