Enterprise الإصدار
نزع تسليح المحتوى وإعادة بنائه (CDR)
لمحة سريعة
قسم بعنوان «لمحة سريعة»يُحيِّد NextPDF Enterprise ملف PDF غير موثوق عبر نزع تسليح المحتوى وإعادة بنائه (CDR): إذ يحلّل الملف، ويفحصه مقابل حدود القبول، ويكتشف الميزات الخطرة، ويزيلها، ويعيد بناء ملف جديد من الكائنات الباقية. والميزات الخطرة هي محتوًى فعّال — نصوص برمجية مُضمَّنة، وإجراءات تشغيل، وملفات مُضمَّنة، ووسائط غنية، وما شابهها — قد يشغّله عارض أو يتصرّف بناءً عليه. وهذه الصفحة على مستوى السلوك: تذكر ما يقبله المحرّك، وما يجرّده، وما يعيد بناءه، ولماذا لا يكون المخرَج نسخة استدلالية.
CDR تحويل تخريبي وحيد الاتجاه. والمخرَج المُعاد بناؤه إسقاط أمني للمُدخَل، لا نسخة محفوظة أو مكافئة بالتجزئة. ويُذكَر ذلك الحدّ تحت الأمان والامتثال.
المتطلبات المسبقة مذكورة في الواجهة الأمامية ومكرّرة تحت المتطلبات المسبقة.
التوفّر والترخيص
قسم بعنوان «التوفّر والترخيص»تُشحَن هذه القدرة في NextPDF Enterprise (nextpdf/enterprise) وتُفعَّل بمظروف ترخيص من فئة Enterprise. ولا يُحمِّل نشرٌ بلا ذلك الاستحقاق أصناف القدرة. ولا يوفّر NextPDF Core وNextPDF Pro CDR. ويعمل المحرّك داخل العملية؛ ويُحلَّل المستند غير الموثوق ويُعاد بناؤه على مضيفك. قارِن الإصدارات واحصل على ترخيص.
ما الذي تفعله هذه القدرة
قسم بعنوان «ما الذي تفعله هذه القدرة»يدعم PDF محتوًى فعّالًا قد يشغّله عارض أو يتصرّف بناءً عليه. ويسبّب إجراء ECMAScript تنفيذ مُعالِج PDF لنصٍّ برمجي قد يغيّر قيم الحقول والمظاهر، وفق ISO 32000-2 §12.6.4. ويطلق إجراء التشغيل تطبيقًا أو يفتح مستندًا أو يطبعه، وفق ISO 32000-2 §12.6.4. وتعمل النصوص البرمجية على مستوى المستند في قاموس الأسماء تلقائيًّا عند فتح المستند، وفق ISO 32000-2 §7.7.4. ويزيل CDR هذه الأسطح.
يشغّل المحرّك مسارًا مُرتَّبًا:
- التحليل للملف PDF المُدخَل.
- ضبط القبول — التحقق من أن المستند ضمن حدّ القبول (عدد الكائنات، وعدد الصفحات، وحجم التدفّق بعد فكّ الضغط، ونسبة تضخّم تدفّق تدافع عن مدخلات قنبلة فكّ الضغط). ويُرفَض مستند خارج الحدود، لا يُطهَّر. ويُبلَّغ الرفض على نحو مميَّز عن نتيجة التطهير حتى تستطيع معالجتك للأخطاء التمييز بينهما.
- كشف التهديدات — مسح أنواع التهديدات المُعدَّة.
- الترشيح — تقسيم الكائنات إلى المجموعة الآمنة والمجموعة المُزالة.
- تنقية المراجع — تنظيف المؤشّرات المتدلّية التي خلّفتها الإزالة.
- إعادة البناء — تسلسلة الكائنات الآمنة إلى ملف PDF جديد.
تشمل أنواع التهديدات القابلة للكشف النصوص البرمجية المُضمَّنة (وتجريد النصوص العدواني الذي يلتقط النصوص في البُنى المُشوَّهة)، ومحفّزات الإجراءات الإضافية وإجراء الفتح، وإجراءات التشغيل، وإجراءات الانتقال البعيد، وإجراءات إرسال النماذج واستيراد البيانات، والملفات المُضمَّنة، والوسائط الغنية والمحتوى ثلاثي الأبعاد، وأشجار أسماء النصوص البرمجية على مستوى المستند، وإجراءات معرّف الموارد المُوحَّد (URI) الخارجية، وبيانات بنية نماذج XML، وحقول النماذج التفاعلية، وطبقات المحتوى الاختيارية غير الافتراضية، وكائنات التوقيع الرقمي (التي تُبطِلها إعادة البناء بالضرورة لأن نطاقات البايتات لم تعد متطابقة). والكائن الذي يتعذّر تحليله يُعامَل بنفسه بوصفه تجاوزًا محتملًا ويُزال.
تضبط ثلاث سياسات الافتراضات:
- Standard — تزيل أنواع تهديدات المحتوى الفعّال المُعدَّة والقابلة للكشف بالمحرّك؛ وتُسطَّح التحديثات التدريجية دائمًا للدفاع عن انتحال ظلّ التوقيع، وهذا التسطيح غير قابل للإعداد في هذا الوضع.
- Paranoid — الإزالات نفسها مع حدود موارد أضيق.
- Permissive — للمصادر الموثوقة: تزيل النصوص البرمجية وإجراءات التشغيل لكنها تحافظ على إجراءات URI، وتجعل تسطيح التحديث التدريجي قابلًا للإعداد.
لماذا يعمل بهذه الطريقة
قسم بعنوان «لماذا يعمل بهذه الطريقة»يعيد CDR بناء ملف جديد من الكائنات التي حكم بأنها آمنة، بدلًا من حذف المفاتيح الخطرة في مكانها. وموقف قائمة السماح هذا هو القرار الحامل. فالكائن الذي لم يتعرّف عليه الكاشف قط — بما في ذلك كائن تعذّر تحليله — لا يبقى في المخرَج، فتفشل البنية المجهولة فشلًا مغلقًا بدلًا من الانزلاق عبر ثغرة قائمة منع. ويعمل ضبط القبول أولًا للسبب نفسه: فالمُدخَل خارج الحدّ أو المتعذّر تحليله يُرفَض رفضًا صريحًا، ولا يُعاد بناؤه جزئيًّا أبدًا. وثمن تلك السلامة هو الحفظ. فإعادة البناء تغيّر تخطيط البايتات، وتُبطِل التوقيعات، وتُسقِط الحِمولات التي يُجرَّد نوع تهديدها — ولهذا يكون المخرَج إسقاطًا أمنيًّا، لا نسخة استدلالية أبدًا.
خلفية التصميم: تطهير ملفات PDF غير الموثوقة: نزع تسليح المحتوى وإعادة بنائه.
المتطلبات المسبقة
قسم بعنوان «المتطلبات المسبقة»- ثبّت NextPDF Core وحزمة Enterprise، واحتفظ بترخيص Enterprise فعّال.
- عرّف حدّ القبول لمدخلاتك — أقصى عدد كائنات، وعدد صفحات، وحجم تدفّق بعد فكّ الضغط، ونسبة تضخّم — أو استخدم حدود سياسة مُعدّة مسبقًا.
- قرّر السياسة: standard للقبول العام غير الموثوق، وparanoid لأشدّ موقف، وpermissive للمصادر الموثوقة فقط.
الإعداد
قسم بعنوان «الإعداد»السياسة غير قابلة للتغيير وتحمل:
- أنواع التهديدات المراد إزالتها — المجموعة التي يمسحها الكاشف ويجرّدها مُعيد البناء.
- معالجة إجراء URI — ما إذا كانت إجراءات URI الخارجية تُحفَظ.
- تسطيح التحديث التدريجي — مُفعَّل دائمًا في standard وparanoid؛ قابل للإعداد في permissive.
- حدود القبول — أقصى عدد كائنات، وعدد صفحات، وحجم تدفّق بعد فكّ الضغط، ونسبة تضخّم. وهذه هي حدّ القبول، لا سلوك التطهير؛ ويرفض تجاوزها المستند.
خطوة بخطوة
قسم بعنوان «خطوة بخطوة»- اقرأ بايتات PDF غير الموثوق.
- اختر سياسة (standard أو paranoid أو permissive) أو ابنِ واحدة بحدود صريحة.
- شغّل عملية التطهير في المحرّك بالبايتات والسياسة.
- افحص النتيجة: إن أبلغت بعدم القبول، فأظهِر سبب الرفض؛ وإلّا فاستخدم البايتات المُعاد بناؤها وقائمة التهديدات المُزالة.
- عامِل المخرَج المُعاد بناؤه بوصفه إسقاطًا مُطهَّرًا، لا نسخة استدلالية أو أرشيفية للمُدخَل أبدًا.
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\Cdr\CdrEngine;use NextPDF\Enterprise\Security\Cdr\CdrPolicy;use NextPDF\Enterprise\Security\Cdr\CdrResult;use Psr\Log\LoggerInterface;
final readonly class UntrustedPdfIntake{ public function __construct( private CdrEngine $engine, private LoggerInterface $logger, ) {}
/** * Sanitize an untrusted PDF and distinguish rejection from a clean rebuild. * * An over-limit document is rejected by admission control, not sanitized; * the caller surfaces the rejection reason instead of trusting an empty * output. The rebuilt bytes are a security projection, never an * evidentiary copy of the input. * * @param string $pdfBytes The untrusted PDF bytes. * * @return CdrResult The sanitization result, including admission status. */ public function sanitize(string $pdfBytes): CdrResult { $result = $this->engine->sanitize($pdfBytes, CdrPolicy::standard());
if (! $result->admitted) { $this->logger->warning('PDF rejected by CDR admission control', [ 'reason' => $result->rejectionReason, ]);
return $result; }
$this->logger->info('PDF sanitized', [ 'removedThreats' => \count($result->removedThreats), 'originalSize' => $result->originalSize, 'sanitizedSize' => $result->sanitizedSize, ]);
return $result; }}التحقق
قسم بعنوان «التحقق»- شغّل عيّنة تحمل سطح محتوًى فعّال معروف (مثلًا نصًّا برمجيًّا على مستوى المستند) وأكّد ظهوره في قائمة التهديدات المُزالة وغيابه من المخرَج المُعاد بناؤه.
- شغّل مستندًا خارج الحدّ وأكّد أن النتيجة تبلّغ بعدم القبول مع سبب رفض، وأن البايتات المُعاد بناؤها فارغة.
- أكّد أن مُدخَلًا موقَّعًا رقميًّا قد أُزيلت كائنات توقيعه في إعادة البناء — تُبطِل إعادة البناء التوقيع الأصلي لأن نطاقات البايتات تتغيّر، فتُجرَّد كائنات التوقيع المتقادمة عمدًا.
- افتح المخرَج المُعاد بناؤه في عارض وأكّد عدم تنفيذ أي نص برمجي عند الفتح.
الأمان والامتثال
قسم بعنوان «الأمان والامتثال»- ليس للاستدلال. المخرَج المُعاد بناؤه إسقاط تخريبي غير قابل للعكس. لا تستخدمه لحفظ الأدلّة القانونية، أو لمقارنة التجزئة بالأصل، أو بوصفه نسخة أرشيفية. احتفظ بالأصل في عُهدة منفصلة إن احتجت إلى نسخة استدلالية.
- القبول قبل التطهير. حدود الموارد حدّ قبول؛ ويُرفَض مستند خارج الحدّ، لا يُطهَّر. أبلِغ الرفض على نحو مميَّز حتى لا يُخلَط مُدخَل خارج الحدّ أبدًا بإعادة بناء نظيفة.
- يُزال المحتوى الفعّال. تُجرَّد النصوص البرمجية وإجراءات التشغيل وأشجار أسماء النصوص البرمجية على مستوى المستند والملفات المُضمَّنة والوسائط الغنية وما شابهها — وهي ذات الإجراءات التي كان عارض سينفّذها (إجراء ECMAScript في ISO 32000-2 §12.6.4؛ إجراء التشغيل؛ النصوص البرمجية على مستوى المستند في §7.7.4).
- تُبطِل إعادة البناء التوقيعات. لأن إعادة البناء تغيّر تخطيط البايتات، لم يعد التوقيع الأصلي قادرًا على التحقق؛ وتُزال كائنات التوقيع بدلًا من تركها في مكانها على نحو مُضلِّل.
- مفقود للبيانات عمدًا. تُزال حِمولات الملفات المُضمَّنة — بما فيها مرفقات الفواتير مثل Factur-X — عند تجريد نوع تهديدها. وCDR إسقاط أمني، لا طبقة حفظ.
تتعلّق هذه الصفحة بأمان المستندات. وكل مصدر معياري مُلخَّص؛ ولا يُعاد إنتاج أي نص معياري.
معالجة الإخفاق
قسم بعنوان «معالجة الإخفاق»- إخفاق التحليل. يُنتج مستند يتعذّر تحليله نتيجة بعدم القبول مع سبب خطأ تحليل بدلًا من إعادة بناء جزئية.
- مُدخَل خارج الحدّ. تبلّغ النتيجة بعدم القبول مع سبب خاصّ بالحدّ؛ والبايتات المُعاد بناؤها فارغة.
- كائن يتعذّر تحليله. يُعامَل الكائن الذي يتعذّر تحليله بوصفه تجاوزًا محتملًا ويُزال، لا يُبقى بصمت.
- عدّ صفحات بأفضل جهد. فحص قبول عدّ الصفحات بأفضل جهد؛ ولا يُعطِّل فهرس مُشوَّه المسار، لكن حدود عدّ الكائنات والتدفّق تظل تنطبق.
حدّ النشر
قسم بعنوان «حدّ النشر»توثّق هذه الصفحة السلوك القابل للملاحظة خارجيًّا وسطح API العام المدعوم فقط. أما مسارات فضاءات الأسماء الداخلية، وأصناف المساعِدة، وجداول الآليات، وأسماء ملفات كتيّبات التشغيل، وبادئات التذاكر فخارج النطاق.
انظر أيضًا
قسم بعنوان «انظر أيضًا»- الأمان — NextPDF Enterprise — سطح أمان Enterprise المُجمَّع.
- التحقق — NextPDF Enterprise — فحص مطابقة ملف PDF مُنتَج أو مُعاد بناؤه.
- التحليل الجنائي — NextPDF Enterprise — فحص المستندات وتتبّعها.
- الأمان — NextPDF Core — سطح التشفير والتوقيع الأساسي.
- CDR · المحتوى الفعّال · هجوم الظلّ — مصطلحات المسرد.