İçeriğe geç
getnextpdf.com

Enterprise sürüm

Content Disarm and Reconstruction (CDR)

NextPDF Enterprise, güvenilmeyen bir PDF’i Content Disarm and Reconstruction (CDR) ile etkisizleştirir: dosyayı ayrıştırır, kabul sınırlarına karşı denetler, tehlikeli özellikleri algılar, bunları kaldırır ve kalan nesnelerden yeni bir dosya yeniden oluşturur. Tehlikeli özellikler, bir görüntüleyicinin çalıştırabileceği veya üzerine işlem yapabileceği etkin içeriktir — gömülü betikler, başlatma eylemleri, gömülü dosyalar, zengin medya ve benzeri. Bu sayfa davranış düzeyindedir: motorun neyi kabul ettiğini, neyi sıyırdığını, neyi yeniden oluşturduğunu ve çıktının neden bir kanıt kopyası olmadığını belirtir.

CDR yıkıcı, tek yönlü bir dönüşümdür. Yeniden oluşturulan çıktı, girdinin korunmuş veya özet-eşdeğeri bir kopyası değil, bir güvenlik izdüşümüdür. Bu sınır Güvenlik ve uyumluluk altında belirtilmiştir.

Ön koşullar ön bilgide belirtilmiş ve Ön koşullar altında yinelenmiştir.

Bu yetenek NextPDF Enterprise (nextpdf/enterprise) içinde sunulur ve bir Enterprise katmanı lisans zarfıyla etkinleşir. Bu yetkilendirmeye sahip olmayan bir dağıtım, yeteneğin sınıflarını yüklemez. NextPDF Core ve NextPDF Pro, CDR sağlamaz. Motor süreç içinde çalışır; güvenilmeyen belge, ana makinenizde ayrıştırılır ve yeniden oluşturulur. Sürümleri karşılaştırın ve lisans edinin.

PDF, bir görüntüleyicinin çalıştırabileceği veya üzerine işlem yapabileceği etkin içeriği destekler. Bir ECMAScript eylemi, bir PDF işlemcisinin alan değerlerini ve görünümlerini değiştirebilecek bir betiği çalıştırmasına yol açar — ISO 32000-2 §12.6.4. Bir başlatma eylemi, bir uygulamayı başlatır veya bir belgeyi açar ya da yazdırır — ISO 32000-2 §12.6.4. Ad sözlüğündeki belge düzeyi betikler, belge açıldığında otomatik olarak çalışır — ISO 32000-2 §7.7.4. CDR bu yüzeyleri kaldırır.

Motor sıralı bir işlem hattı çalıştırır:

  1. Girdi PDF’ini ayrıştır.
  2. Kabul denetimi — belgenin kabul sınırı içinde olduğunu doğrula (nesne sayısı, sayfa sayısı, çözülmüş akış boyutu ve sıkıştırma-bombası girdilerine karşı savunan bir akış-şişme oranı). Sınırların dışındaki bir belge, dezenfekte edilmez, reddedilir. Reddetme, bir dezenfekte sonucundan ayrı olarak bildirilir; böylece hata işlemeniz ikisini birbirinden ayırabilir.
  3. Tehditleri algıla — yapılandırılmış tehdit türlerini tara.
  4. Filtrele — nesneleri güvenli küme ile kaldırılan kümeye ayır.
  5. Referans temizleme — kaldırma sonucu boşta kalan işaretçileri temizle.
  6. Yeniden oluştur — güvenli nesneleri yeni bir PDF’e serileştir.

Algılanabilir tehdit türleri; gömülü betikleri (ve hatalı yapılardaki betikleri yakalayan agresif betik sıyırma), ek-eylem ve açma-eylemi tetikleyicilerini, başlatma eylemlerini, uzak git-eylemlerini, form gönderme ve veri içe aktarma eylemlerini, gömülü dosyaları, zengin medyayı ve üç boyutlu içeriği, belge düzeyi betik ad ağaçlarını, harici Tekdüzen Kaynak Tanımlayıcı (URI) eylemlerini, XML Forms Architecture verilerini, etkileşimli form alanlarını, varsayılan olmayan isteğe bağlı içerik katmanlarını ve dijital imza nesnelerini (bayt aralıkları artık eşleşmediğinden bir yeniden oluşturma bunları zorunlu olarak geçersiz kılar) içerir. Ayrıştırılamayan bir nesne, kendisi olası bir atlama olarak ele alınır ve kaldırılır.

Üç politika varsayılanları belirler:

  • Standard — motorun algılayabildiği, yapılandırılmış etkin-içerik tehdit türlerini kaldırır; artımlı güncellemeler imza-gölgelemeye karşı savunmak için her zaman düzleştirilir ve bu düzleştirme bu modda yapılandırılabilir değildir.
  • Paranoid — daha sıkı kaynak sınırlarıyla aynı kaldırmalar.
  • Permissive — güvenilen kaynaklar için: betikleri ve başlatma eylemlerini kaldırır ancak URI eylemlerini korur ve artımlı-güncelleme düzleştirmesini yapılandırılabilir kılar.

CDR, tehlikeli anahtarları yerinde silmek yerine güvenli saydığı nesnelerden yeni bir dosya yeniden oluşturur. Bu izin-listesi duruşu, yük taşıyan karardır. Algılayıcının hiç tanımadığı bir nesne — ayrıştıramadığı biri de dâhil — çıktıya taşınmaz; böylece bilinmeyen bir yapı, bir yasak-listesi boşluğundan sızmak yerine güvenli tarafa kapanır. Kabul denetimi aynı nedenle önce çalışır: sınır aşan veya ayrıştırılamayan bir girdi, asla kısmen yeniden oluşturulmadan doğrudan reddedilir. Bu güvenliğin bedeli korunmadır. Yeniden oluşturma bayt yerleşimini değiştirir, imzaları geçersiz kılar ve tehdit türü sıyrılan yükleri düşürür — çıktının neden asla bir kanıt kopyası değil, bir güvenlik izdüşümü olduğu da budur.

Tasarım arka planı: Güvenilmeyen PDF’leri dezenfekte etme: içerik etkisizleştirme ve yeniden yapılandırma.

  1. NextPDF Core’u ve Enterprise paketini kurun ve etkin bir Enterprise lisansına sahip olun.
  2. Girdileriniz için kabul sınırını tanımlayın — en yüksek nesne sayısı, sayfa sayısı, çözülmüş akış boyutu ve şişme oranı — veya bir hazır politikanın sınırlarını kullanın.
  3. Politikaya karar verin: genel güvenilmeyen alımı için standard, en katı duruş için paranoid veya yalnızca güvenilen kaynaklar için permissive.

Politika değişmezdir ve şunları taşır:

  • Kaldırılacak tehdit türleri — algılayıcının taradığı ve yeniden oluşturucunun sıyırdığı küme.
  • URI eylemi işleme — harici URI eylemlerinin korunup korunmadığı.
  • Artımlı-güncelleme düzleştirmesi — standard ve paranoid’de her zaman açık; permissive’de yapılandırılabilir.
  • Kabul sınırları — en yüksek nesne sayısı, sayfa sayısı, çözülmüş akış boyutu ve şişme oranı. Bunlar dezenfekte davranışı değil, kabul sınırıdır; bunları aşmak belgeyi reddeder.
  1. Güvenilmeyen PDF baytlarını okuyun.
  2. Bir politika seçin (standard, paranoid veya permissive) ya da açık sınırlarla bir tane oluşturun.
  3. Motorun dezenfekte işlemini baytlar ve politikayla çalıştırın.
  4. Sonucu inceleyin: kabul edilmedi bildiriyorsa reddetme nedenini açığa çıkarın; aksi hâlde yeniden oluşturulan baytları ve kaldırılan tehditler listesini kullanın.
  5. Yeniden oluşturulan çıktıyı, asla girdinin bir kanıt veya arşiv kopyası olarak değil, dezenfekte edilmiş bir izdüşüm olarak ele alın.
examples/enterprise/cdr-sanitize-guarded.php
<?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;
}
}
  1. Bilinen bir etkin-içerik yüzeyi taşıyan bir örnek (örneğin belge düzeyi bir betik) çalıştırın ve bunun kaldırılan-tehditler listesinde göründüğünü ve yeniden oluşturulan çıktıda bulunmadığını doğrulayın.
  2. Sınır aşan bir belge çalıştırın ve sonucun bir reddetme nedeniyle kabul edilmedi bildirdiğini ve yeniden oluşturulan baytların boş olduğunu doğrulayın.
  3. Dijital olarak imzalanmış bir girdinin imza nesnelerinin yeniden oluşturmada kaldırıldığını doğrulayın — bir yeniden oluşturma, bayt aralıkları değiştiğinden orijinal imzayı geçersiz kılar; bu nedenle güncelliğini yitirmiş imza nesneleri tasarım gereği sıyrılır.
  4. Yeniden oluşturulan çıktıyı bir görüntüleyicide açın ve açılışta hiçbir betiğin çalışmadığını doğrulayın.
  • Kanıt için değildir. Yeniden oluşturulan çıktı, yıkıcı, geri döndürülemez bir izdüşümdür. Onu hukuki kanıt korunması için, orijinalle özet karşılaştırması için veya bir arşiv kopyası olarak kullanmayın. Bir kanıt kopyasına ihtiyacınız varsa orijinali ayrı bir muhafaza altında tutun.
  • Dezenfekteden önce kabul. Kaynak sınırları bir kabul sınırıdır; sınır aşan bir belge dezenfekte edilmez, reddedilir. Reddetmeyi ayrı bildirin; böylece sınır aşan bir girdi asla temiz bir yeniden oluşturmayla karıştırılmaz.
  • Etkin içerik kaldırılır. Betikler, başlatma eylemleri, belge düzeyi betik ad ağaçları, gömülü dosyalar, zengin medya ve benzeri yüzeyler sıyrılır — bir görüntüleyicinin aksi hâlde çalıştıracağı eylemlerin ta kendisi (ISO 32000-2 §12.6.4 ECMAScript eylemi; başlatma eylemi; belge düzeyi betikler §7.7.4).
  • İmzalar yeniden oluşturmayla geçersiz kılınır. Yeniden oluşturma bayt yerleşimini değiştirdiğinden orijinal imza artık doğrulanamaz; imza nesneleri, yanıltıcı bir şekilde yerinde bırakılmak yerine kaldırılır.
  • Tasarım gereği kayıplıdır. Gömülü dosya yükleri — Factur-X gibi fatura ekleri dâhil — tehdit türleri sıyrıldığında kaldırılır. CDR bir koruma katmanı değil, bir güvenlik izdüşümüdür.

Bu sayfa belge güvenliğiyle ilgilidir. Her normatif kaynak başka sözcüklerle ifade edilmiştir; hiçbir normatif metin yeniden üretilmez.

  • Ayrıştırma hatası. Ayrıştırılamayan bir belge, kısmi bir yeniden oluşturma yerine bir ayrıştırma-hatası nedeniyle kabul-edilmedi sonucu verir.
  • Sınır aşan girdi. Sonuç, sınıra özgü bir nedenle kabul edilmedi bildirir; yeniden oluşturulan baytlar boştur.
  • Ayrıştırılamayan nesne. Ayrıştırılamayan bir nesne, sessizce tutulmak yerine olası bir atlama olarak ele alınır ve kaldırılır.
  • En iyi çaba sayfa sayımı. Sayfa-sayısı kabul denetimi en iyi çabadır; hatalı bir katalog işlem hattını çökertmez, ancak nesne-sayısı ve akış sınırları yine de uygulanır.

Bu sayfa yalnızca dışarıdan gözlemlenebilir davranışı ve desteklenen genel API yüzeyini belgeler. Dâhili ad alanı yolları, yardımcı sınıflar, mekanizma tabloları, runbook dosya adları ve bilet önekleri kapsam dışıdır.