تخطَّ إلى المحتوى

أوامر Pompelmi

أوامر الفحص الأمني الشامل لتحميل الملفات Pompelmi لحماية تطبيقات Node.js.

الأمرالوصف
npm install pompelmiتثبيت Pompelmi عبر npm
yarn add pompelmiتثبيت Pompelmi عبر Yarn
pnpm add pompelmiتثبيت Pompelmi عبر pnpm
bun add pompelmiتثبيت Pompelmi عبر 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 });
});
الإطارالوصف
pompelmi/expressمحول وسيط Express.js
pompelmi/koaمحول وسيط Koa
pompelmi/nextمحول مسار API Next.js
pompelmi/nitroمحول Nuxt/Nitro
pompelmi/fastifyمحول مكون Fastify الإضافي
الخيارالوصف
maxFileSize: '10mb'أقصى حجم ملف مسموح
allowedExtensions: ['.pdf', '.png']قائمة بيضاء لامتدادات الملفات المسموحة
blockedExtensions: ['.exe', '.bat']قائمة سوداء لامتدادات الملفات المحظورة
allowedMimeTypes: ['image/png']قائمة بيضاء لأنواع MIME المسموحة
scanTimeout: 30000انتهاء مهلة الفحص بالميلي ثانية
tempDir: '/tmp/pompelmi'دليل مؤقت للفحص
preserveOriginalName: trueالاحتفاظ باسم الملف الأصلي
الخيارالوصف
yara: { enabled: true }تفعيل فحص قواعد YARA
yara: { rules: './rules/' }المسار إلى دليل قواعد YARA المخصصة
yara: { builtinRules: true }استخدام قواعد كشف البرامج الضارة المدمجة
yara: { timeout: 10000 }مهلة فحص YARA
ملف قواعد YARA مخصصةكتابة ملفات .yar للكشف المخصص
الخيارالوصف
archive: { enabled: true }تفعيل فحص الأرشيف
archive: { maxDepth: 3 }أقصى عمق تكرار للأرشيفات المتداخلة
archive: { maxFiles: 100 }أقصى ملفات داخل الأرشيف
archive: { maxRatio: 100 }نسبة الضغط القصوى (حماية قنبلة الضغط)
archive: { maxSize: '100mb' }أقصى حجم مستخرج إجمالي
archive: { formats: ['zip', 'tar', 'gz'] }تنسيقات أرشيف مدعومة
السياسةالوصف
policy: 'strict'حجب أي شيء مريب (مستحسن)
policy: 'moderate'حجب البرامج الضارة المعروفة، تحذير من المريب
policy: 'permissive'حجب البرامج الضارة المؤكدة فقط
دالة سياسة مخصصةتحديد منطقك الخاص للقبول/الرفض
الفحصالوصف
التحقق من الامتدادفحص امتداد الملف مقابل قائمة بيضاء
كشف بايت السحرالتحقق من نوع الملف حسب بايتات المحتوى
التحقق من نوع MIMEفحص نوع MIME من جانب الخادم
كشف الامتداد المزدوجاكتشاف حيل file.pdf.exe
كشف بايت Nullحجب حقن بايت Null في أسماء الملفات
عدم تطابق المحتوى والنوعاكتشاف عدم تطابق الامتداد/المحتوى
الحدثالوصف
scanner.on('scan:start', fn)يتم تشغيله عند بدء الفحص
scanner.on('scan:complete', fn)يتم تشغيله عند انتهاء الفحص
scanner.on('scan:reject', fn)يتم تشغيله عند رفض الملف
scanner.on('scan:accept', fn)يتم تشغيله عند نجاح الملف في جميع الفحوصات
scanner.on('scan:error', fn)يتم تشغيله عند خطأ الفحص
scanner.on('yara:match', fn)يتم تشغيله عند مطابقة قاعدة YARA
الخاصيةالوصف
result.safeمنطقي: نجح الملف في جميع الفحوصات
result.threatsمصفوفة من التهديدات المكتشفة
result.mimeTypeنوع MIME المكتشف
result.extensionامتداد الملف
result.sizeحجم الملف بالبايتات
result.hashSHA-256 hash للملف
result.scanTimeالوقت المستغرق للفحص (ms)
result.yaraMatchesمطابقات قواعد YARA (إن كانت مفعلة)
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',
});

// كوسيط
app.post('/upload', scanner.middleware(), handleUpload);

// الفحص اليدوي
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: 'تم رفض الملف',
      threats: result.threats,
    });
  }

  // معالجة الملف الآمن...
});
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 });
});
الأمرالوصف
npx pompelmi scan <file>فحص ملف واحد
npx pompelmi scan ./uploads/فحص دليل من الملفات
npx pompelmi scan --yara <file>فحص باستخدام قواعد YARA
npx pompelmi scan --json <file>إخراج النتائج بصيغة JSON
npx pompelmi rules listقائمة قواعد YARA المتاحة
npx pompelmi rules updateتحديث قواعد YARA المدمجة
النصيحةالوصف
استخدم سياسة صارمة في الإنتاجاحجب أي شيء مريب
فعّل قواعد YARAاكتشف التوقيعات المعروفة للبرامج الضارة
عيّن حدود الأرشيفمنع قنابل الضغط والحمولات المتداخلة
تحقق من أنواع MIME من جانب الخادملا تثق بـ Content-Type للعميل
افحص الامتدادات المزدوجةاحجب أنماط file.pdf.exe
عيّن حدود حجم معقولةمنع الاستنزاف الموارد
فحص في الذاكرةتجنب كتابة الملفات غير الموثوقة على القرص
راقب أحداث الفحصسجل التنبيهات عند الرفض
حدّث قواعد YARA بانتظامابق محدثاً مع خط ذكاء التهديدات
استخدم قوائم بيضاء على قوائم سوداءالقائمة البيضاء أكثر أماناً من القائمة السوداء