Zum Inhalt springen

Pompelmi-Befehle

Umfassende Pompelmi-Datei-Upload-Sicherheitsscan-Befehle für Node.js-Anwendungsschutz.

Installation

BefehlBeschreibung
npm install pompelmiPompelmi via npm installieren
yarn add pompelmiPompelmi via Yarn installieren
pnpm add pompelmiPompelmi via pnpm installieren
bun add pompelmiPompelmi via Bun installieren

Grundlegende Konfiguration (Express)

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 });
});

Framework-Adapter

FrameworkBeschreibung
pompelmi/expressExpress.js-Middleware-Adapter
pompelmi/koaKoa-Middleware-Adapter
pompelmi/nextNext.js-API-Route-Adapter
pompelmi/nitroNuxt/Nitro-Adapter
pompelmi/fastifyFastify-Plugin-Adapter

Scanner-Konfiguration

OptionBeschreibung
maxFileSize: '10mb'Maximal zulässige Dateigröße
allowedExtensions: ['.pdf', '.png']Whitelist der zulässigen Dateierweiterungen
blockedExtensions: ['.exe', '.bat']Blacklist der blockierten Erweiterungen
allowedMimeTypes: ['image/png']Whitelist der zulässigen MIME-Typen
scanTimeout: 30000Scan-Timeout in Millisekunden
tempDir: '/tmp/pompelmi'Temporäres Verzeichnis zum Scannen
preserveOriginalName: trueUrsprünglichen Dateinamen behalten

YARA-Integration

OptionBeschreibung
yara: { enabled: true }YARA-Regelscanning aktivieren
yara: { rules: './rules/' }Pfad zum benutzerdefinierten YARA-Regelverzeichnis
yara: { builtinRules: true }Integrierte Malware-Erkennungsregeln verwenden
yara: { timeout: 10000 }YARA-Scan-Timeout
Benutzerdefinierte YARA-Regeldatei.yar Dateien für benutzerdefinierte Erkennungen schreiben

Archive-Schutz

OptionBeschreibung
archive: { enabled: true }Archive-Inspektion aktivieren
archive: { maxDepth: 3 }Maximale Rekursionstiefe für verschachtelte Archive
archive: { maxFiles: 100 }Maximale Dateien im Archive
archive: { maxRatio: 100 }Max Kompressionsrate (Zip-Bomb-Schutz)
archive: { maxSize: '100mb' }Max extrahierte Gesamtgröße
archive: { formats: ['zip', 'tar', 'gz'] }Unterstützte Archive-Formate

Sicherheitsrichtlinien

RichtlinieBeschreibung
policy: 'strict'Alles verdächtig blockieren (empfohlen)
policy: 'moderate'Bekannte Malware blockieren, vor verdächtig warnen
policy: 'permissive'Nur bestätigte Malware blockieren
Benutzerdefinierte RichtlinienfunktionEigene Accept/Reject-Logik definieren

MIME-Typ-Validierung

CheckBeschreibung
Extension-ValidierungDateierweiterung gegen Allowlist überprüfen
Magic-Byte-ErkennungDateityp nach Content-Bytes überprüfen
MIME-Typ-ÜberprüfungServerseitige MIME-Typ-Überprüfung
Doppel-Erweiterungs-Erkennungfile.pdf.exe Tricks erkennen
Null-Byte-ErkennungNull-Byte-Injektionen in Dateinamen blockieren
Content-Type-MismatchErweiterungs-/Content-Abweichungen erkennen

Event-Hooks

EventBeschreibung
scanner.on('scan:start', fn)Beim Scan-Start ausgelöst
scanner.on('scan:complete', fn)Beim Scan-Ende ausgelöst
scanner.on('scan:reject', fn)Wenn Datei abgelehnt wird ausgelöst
scanner.on('scan:accept', fn)Wenn Datei alle Checks passiert ausgelöst
scanner.on('scan:error', fn)Bei Scan-Fehler ausgelöst
scanner.on('yara:match', fn)Wenn YARA-Regel matched ausgelöst

Scan-Ergebnisse

PropertyBeschreibung
result.safeBoolean: Datei hat alle Checks bestanden
result.threatsArray der erkannten Bedrohungen
result.mimeTypeErkannter MIME-Typ
result.extensionDateierweiterung
result.sizeDateigröße in Bytes
result.hashSHA-256-Hash der Datei
result.scanTimeZeit zum Scannen (ms)
result.yaraMatchesYARA-Regel-Matches (falls aktiviert)

Express-Middleware-Beispiel

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',
});

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

// Manuelles Scannen
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,
    });
  }

  // Sichere Datei verarbeiten...
});

Koa-Adapter-Beispiel

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 };
});

Next.js-API-Route-Beispiel

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 });
});

CLI-Scanning

BefehlBeschreibung
npx pompelmi scan <file>Einzelne Datei scannen
npx pompelmi scan ./uploads/Verzeichnis von Dateien scannen
npx pompelmi scan --yara <file>Mit YARA-Regeln scannen
npx pompelmi scan --json <file>Ergebnisse als JSON ausgeben
npx pompelmi rules listVerfügbare YARA-Regeln auflisten
npx pompelmi rules updateIntegrierte YARA-Regeln aktualisieren

Tipps und Best Practices

TippBeschreibung
Strikte Richtlinie in Produktion verwendenAlles verdächtige blockieren
YARA-Regeln aktivierenBekannte Malware-Signaturen erkennen
Archive-Limits setzenZip-Bombs und verschachtelte Payloads verhindern
MIME-Typen auf Server-Seite validierenNicht auf Client-Content-Type vertrauen
Doppel-Erweiterungen überprüfenfile.pdf.exe Muster blockieren
Angemessene Größenlimits setzenRessourcenerschöpfung verhindern
Im Speicher scannenVertraute Dateien nicht auf Disk schreiben
Scan-Events überwachenAblehnungen protokollieren und alarmieren
YARA-Regeln regelmäßig aktualisierenMit Threat-Intelligence aktuell bleiben
Allowlists über Blocklists verwendenWhitelist-Ansatz ist sicherer als Blacklist