Enterprise sürüm
İçerik Silahsızlandırma ve Yeniden Yapılandırma — Derinlemesine başvuru
Bir bakışta
“Bir bakışta” başlıklı bölümBu sayfa, NextPDF\Enterprise\Security\Cdr modülü için derin başvurudur. Modül, güvenilmeyen bir PDF’i silahsızlandırır ve onun güvenli nesnelerinden temiz bir dosya yeniden yapılandırır. Hat şudur: ayrıştırma, kabul denetimi, tehdit algılama, filtreleme, referans temizleme, yeniden yapılandırma. Çıktı, girdinin bir güvenlik izdüşümüdür; asla bir kanıt kopyası değildir. İş akışı rehberliği için önce CDR yetenek sayfasını okuyun.
Kullanılabilirlik ve lisanslama
“Kullanılabilirlik ve lisanslama” başlıklı bölümBu yetenek NextPDF Enterprise (nextpdf/enterprise) ile gelir 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. Sürümleri karşılaştırın ve bir lisans edinin.
Genel API yüzeyi
“Genel API yüzeyi” başlıklı bölüm| Simge | Parametreler | Varsayılan davranış | Döndürür | Fırlattığı ya da başarısız olduğu durum | Notlar |
|---|---|---|---|---|---|
CdrEngine::__construct | yok | Dahili dedektörü ve yeniden yapılandırıcıyı oluşturur | CdrEngine | Bildirilmiş bir şey yok | Enjekte edilebilir iş birlikçisi yok |
CdrEngine::sanitize | string $pdfData, ?CdrPolicy $policy = null | Tam hattı CdrPolicy::standard() altında çalıştırır | CdrResult | Düşmanca girdide fırlatmaz; ayrıştırma ve kabul başarısızlıkları reddedilmiş bir sonuç döndürür | Sonuç, reddi sanitizasyondan ayrı olarak bildirir |
CdrPolicy::__construct | yedi isteğe bağlı adlandırılmış parametre, koda bakın | Boş kaldırma kümesi; allowUriActions false; flattenIncrementalUpdates true; sınırlar 100000 nesne, 256 MiB çözülmüş, 10000 sayfa, 1000.0 şişme | CdrPolicy | Bildirilmiş bir şey yok | final readonly; boş bir removeThreatTypes listesi hiçbir şey algılamaz |
CdrPolicy::standard | yok | Legacy tehdit kümesi; URI eylemleri kaldırılır; varsayılan sınırlar | self | Bildirilmiş bir şey yok | Yedi kayıplı Strip* durumunu hariç tutar |
CdrPolicy::paranoid | yok | Daha sıkı sınırlarla legacy tehdit kümesi: 50000 nesne, 128 MiB, 5000 sayfa, 100.0 şişme | self | Bildirilmiş bir şey yok | Yedi kayıplı Strip* durumunu hariç tutar |
CdrPolicy::permissive | yok | Yalnızca JavaScript, LaunchAction, NamedJavaScript, SubmitForm, ImportData kaldırır; URI eylemlerini korur | self | Bildirilmiş bir şey yok | Güvenilir kaynaklar için tasarlanmıştır |
CdrPolicy::allThreatTypes | yok | Kayıplı Strip* durumları dahil her ThreatType durumunu döndürür | list<ThreatType> | Bildirilmiş bir şey yok | Açık maksimal-strip tercihi |
CdrPolicy::legacyThreatTypes | yok | Yedi Strip* durumu dışındaki her durumu döndürür | list<ThreatType> | Bildirilmiş bir şey yok | standard() ve paranoid() için varsayılan kaldırma kümesi |
CdrPolicy::shouldRemove | ThreatType $type | removeThreatTypes karşısında üyelik testi | bool | Bildirilmiş bir şey yok | allowUriActions true olduğunda UriAction için false döndürür |
ThreatDetector::detect | PdfReader $reader, CdrPolicy $policy | Her nesneyi ve fragman kataloğunu ilkenin tehdit türleri için tarar | list<DetectedThreat> | Fırlatmaz; ayrıştırılamayan bir nesne bir UnparseableObject tehdidine dönüşür | Katalog taraması /Names/JavaScript ağacını kapsar |
CdrRebuilder::rebuild | PdfReader $reader, list<int> $safeObjNums, list<int> $removedObjNums, CdrPolicy $policy | Güvenli nesneleri tek revizyonlu bir %PDF-2.0 dosyaya seri hâle getirir | string | Bildirilmiş bir şey yok; yeniden okumada ya da /Length doğrulamasında başarısız olan nesneler atlanır | $policy, gelecekteki seri hâle getirme ayarlamaları için ayrılmıştır |
DetectedThreat::__construct | ThreatType $type, int $objectNumber, string $description, string $location = '' | Değişmez bulgu değer nesnesi | DetectedThreat | Bildirilmiş bir şey yok | Dört özelliğin tümü public readonly |
ThreatType | string destekli enum | Yirmi durum: on üç legacy artı yedi tercihe bağlı Strip* durum | yok | yok | Aşağıdaki durum envanterine bakın |
Giriş noktası imzaları
“Giriş noktası imzaları” başlıklı bölümfinal class CdrEngine{ public function __construct()
public function sanitize(string $pdfData, ?CdrPolicy $policy = null): CdrResult}final readonly class CdrPolicy{ public function __construct( public array $removeThreatTypes = [], public bool $allowUriActions = false, public bool $flattenIncrementalUpdates = true, public int $maxObjects = 100_000, public int $maxDecodedStreamBytes = 268_435_456, public int $maxPageCount = 10_000, public float $maxInflationRatio = 1000.0, )
public static function standard(): self
public static function paranoid(): self
public static function permissive(): self
public static function allThreatTypes(): array
public static function legacyThreatTypes(): array
public function shouldRemove(ThreatType $type): bool}final class ThreatDetector{ public function detect(PdfReader $reader, CdrPolicy $policy): array}final class CdrRebuilder{ public function rebuild(PdfReader $reader, array $safeObjNums, array $removedObjNums, CdrPolicy $policy): string}final readonly class DetectedThreat{ public function __construct( public ThreatType $type, public int $objectNumber, public string $description, public string $location = '', )}enum ThreatType: stringThreatType durum envanteri
“ThreatType durum envanteri” başlıklı bölümOn üç legacy durum, varsayılan kaldırma kümesini oluşturur. Strip* durumları tasarım gereği kayıplıdır ve asla varsayılan bir ilkeye girmez.
| Durum | Destekleyici değer | Algılama yüzeyi |
|---|---|---|
ThreatType::JavaScript | javascript | Herhangi bir nesnede /JS anahtarı ya da bir /S /JavaScript eylemi |
ThreatType::AdditionalActions | additional-actions | Herhangi bir nesnede /AA sözlüğü |
ThreatType::OpenAction | open-action | Herhangi bir nesnede /OpenAction anahtarı |
ThreatType::LaunchAction | launch-action | /S /Launch eylemi |
ThreatType::RemoteGoTo | remote-goto | /S /GoToR ya da /S /GoToE eylemi |
ThreatType::SubmitForm | submit-form | /S /SubmitForm eylemi |
ThreatType::ImportData | import-data | /S /ImportData eylemi |
ThreatType::EmbeddedFiles | embedded-files | /EmbeddedFiles ad ağacı ya da /EF sözlüğü |
ThreatType::RichMedia | rich-media | /Subtype /RichMedia |
ThreatType::NamedJavaScript | named-javascript | Katalog /Names/JavaScript ad ağacı |
ThreatType::UriAction | uri-action | /S /URI eylemi; allowUriActions true olduğunda bastırılır |
ThreatType::Xfa | xfa | /XFA anahtarı |
ThreatType::UnparseableObject | unparseable-object | Ayrıştırmada başarısız olan herhangi bir nesne ya da katalog |
ThreatType::StripJavaScript | strip-javascript | Tercihe bağlı üst küme: /JS anahtarı, /S /JavaScript ya da /Subtype /JavaScript |
ThreatType::StripEmbeddedFiles | strip-embedded-files | Tercihe bağlı: /Type /EmbeddedFile, /Type /Filespec, /EmbeddedFiles ya da /EF |
ThreatType::StripFormFields | strip-form-fields | Tercihe bağlı: /Subtype /Widget, /FT anahtarı ya da /AcroForm anahtarı |
ThreatType::StripAnnotationsRich | strip-annotations-rich | Tercihe bağlı alt türler: Movie, Sound, FileAttachment, 3D, RichMedia, Screen |
ThreatType::StripOcgNonDefault | strip-ocg-non-default | Tercihe bağlı: /Usage ya da /Visibility anahtarıyla /Type /OCG |
ThreatType::StripDigitalSignaturesAtRebuild | strip-digital-signatures-at-rebuild | Tercihe bağlı: /Type /Sig, /FT /Sig, /DSS, /VRI ya da /ByteRange |
ThreatType::Strip3dAndRichMedia | strip-3d-and-rich-media | Tercihe bağlı alt türler: 3D, U3D, PRC, RMF, RichMedia, Sound, Movie |
Davranış sözleşmesi
“Davranış sözleşmesi” başlıklı bölümCdrEngine::sanitize altı sıralı aşama yürütür ve düşmanca girdi için asla fırlatmaz.
- Ayrıştırma. Bir ayrıştırma başarısızlığı,
admittedfalse ve bir ayrıştırma-hatası red nedeniyle bir sonuç döndürür. Bu durumda sanitize edilmiş çıktı boştur. - Kabul denetimi. Nesne sayısı, toplam çözülmüş akış baytları, akış başına şişme oranı ve sayfa sayısı ilke sınırlarına karşı denetlenir. Sınırı aşan bir belge sanitize edilmez, reddedilir. Red ve sanitizasyon ayrı olarak bildirilir.
- Algılama.
ThreatDetector::detecther nesneyi ve fragman kataloğunu ilkenin tehdit türleri için tarar. Ayrıştırılamayan nesneler atlanmak yerineThreatType::UnparseableObjectbulguları olarak kaydedilir. - Filtreleme. Bulgu taşıyan nesneler kaldırma için kuyruğa alınır. Belge kataloğu asla bütün bir nesne olarak kaldırılmaz. Katalog düzeyindeki bulgular (
OpenAction,AdditionalActions,NamedJavaScript) bunun yerine anahtar temizleme ile iyileştirilir. - Referans temizleme. Kaldırılan bir nesneye yapılan her dolaylı referans, seri hâle getirme sırasında
nullile değiştirilir. - Yeniden yapılandırma.
CdrRebuilder::rebuild, yeniden numaralandırılmış nesneler, klasik bir çapraz referans tablosu ve taze bir fragman içeren tek revizyonlu bir%PDF-2.0dosya üretir. Güvenli akış baytları bayt bakımından aynı şekilde kopyalanır. Yeniden yapılandırılmış katalog/OpenAction,/AAve/Namesöğelerini düşürür;/AA, her nesneden düşürülür.
Döndürülen CdrResult, yeniden yapılandırılmış baytları, kaldırılan-tehdit listesini, her iki bayt boyutunu, kabul bayrağını ve red nedenini açığa çıkarır. Kaynağın çözülebilir bir /Root öğesi varsa ve yeniden yapılandırılmış çıktı bunu kaybettiyse, motor yapısal olarak bozuk bir dosya döndürmek yerine çıktıyı reddeder. Bu, bir fail-closed garantidir: admitted true, çıktının hâlâ bir belge kataloğu referansı taşıdığını ima eder.
Artımlı güncellemeler asla hayatta kalmaz: yeniden yapılandırma her ilke altında tam olarak bir revizyon seri hâle getirir, bu yüzden gölge tarzı geç revizyonlar yapıca düzleştirilir. Orijinal dijital imzalar bir yeniden yapılandırma boyunca geçerli kalamaz, çünkü bayt aralıkları artık çıktıyla eşleşmez.
Mimari kırmızı çizgi. CDR bir güvenlik izdüşümü katmanıdır, bir koruma katmanı değil. Çıktı; yasal kanıt korumada, orijinalle karma karşılaştırmasında ya da arşiv kopyalarında kullanılmamalıdır.
Sınır durumları ve başarısızlık modları
“Sınır durumları ve başarısızlık modları” başlıklı bölüm- Bir
nullilke,CdrPolicy::standard()olarak çözümlenir. Varsayılan boşremoveThreatTypesile oluşturulan bir ilke hiçbir şey algılamaz ve kaldırmaz. allowUriActionstrueolarak ayarlandığında, durumremoveThreatTypesiçinde bulunsa bileUriActionkaldırmayı bastırır.flattenIncrementalUpdatesbu sürümde bildirimseldir: yeniden yapılandırma, bayrağıfalseolarak ayarlayanpermissive()dahil her ilke altında tek bir revizyon üretir.- Şişme-oranı denetimi, sıfır olan ham akış uzunluğunu bir olarak ele alır, böylece hiçten şişen bir akış hâlâ sınırlanır. Hiçbir çözülmüş biçim tutulmadığında, ham akış uzunluğu toplam bütçeye sayılır.
- Sayfa-sayısı kabul denetimi en iyi çabadır: bir katalog ya da sayfa ağacı okuma başarısızlığı belgeyi tek başına reddetmez. Nesne-sayısı ve sıkıştırma açma bütçeleri her zaman uygulanır.
- Ham akış uzunluğu tamsayı
/Lengthgirdisiyle uyuşmayan bir nesne, yeniden yapılandırma zamanında atlanır (polyglot savunması). Böyle atlanan bir nesneye yapılan bir referans, kaynak nesne numarasını korur ve çıktıda çözülmeyebilir.sanitize(), algılanabilir biçimde bozuk sonuçları (eksik bir/Root) reddeder, ancak düşük düzeyliCdrRebuilder::rebuild()çağrısını doğrudan süren bir çağıran, çıktı yapısını ve referans bütünlüğünü kendisi yeniden doğrulamalıdır. - Kaynak fragman
/IDtaşıdığında, yeniden yapılandırılmış fragman orijinali değil taze üretilmiş rastgele bir/IDtaşır./Infodahil diğer fragman girdileri taşınmaz; yeniden yapılandırılmış fragman/Size, çözülebilir olduğunda/Rootve yeniden üretilen/IDöğelerini tutar. - Çözülmüş ad ve anahtar baytları, ayırıcılar, boşluk ve yazdırılamayan baytlar için onaltılık kaçışlarla yeniden üretilir, böylece düşmanca adlar çıktıya sözlük söz dizimi enjekte edemez.
- Bilinen ad-değerli kümenin dışındaki sözlük anahtarları altındaki dizge değerleri, temkinli biçimde değişmez dizgeler olarak üretilir.
CdrPolicy::legacyThreatTypes(), gelecekteki herhangi bir enum durumunu birStrip*durumu olarak kayıtlı olmadıkça varsayılan-kaldırılmış olarak ele alır, böylece yeni kayıplı durumlar varsayılan ilkelere sessizce giremez.- CDR bir kriptografik modül değildir. Tek rastgelelik kullanımı yeniden üretilen fragman
/IDöğesidir. İmza doğrulaması burada kapsam dışıdır; bkz. İmza derin başvurusu.
Uygunluk
“Uygunluk” başlıklı bölüm| İddia | Standart | Madde |
|---|---|---|
| Bir ECMAScript eylemini çağırmak, bir PDF işlemcisinin gömülü betiği yürütmesine yol açar. | ISO 32000-2 | §12.6.4.17 |
JavaScript ad ağacındaki belge düzeyi betiklerin tümü belge açıldığında yürütülür. | ISO 32000-2 | §12.6.4.17 |
Katalog ad sözlüğü, belge düzeyi betik eylemlerinden oluşan bir JavaScript ad ağacı tutabilir. | ISO 32000-2 | §7.7.4 (Table 32) |
| Bir başlatma eylemi bir uygulamayı başlatır ya da bir belgeyi açar veya yazdırır. | ISO 32000-2 | §12.6.4.6 |
/AA ek-eylem sözlükleri, açıklamalardaki, sayfalardaki, alanlardaki ve katalogdaki tetikleyici olayları genişletir. | ISO 32000-2 | §12.6.3 |
| Güvenilmeyen dosya alımı, gelen dosyaların varlığını, hacmini ve içeriğini sınırlamalıdır. | OWASP ASVS 5.0 | §5.2 |
| Sistemler, yüklenen dosyaların uygunsuz yürütülmesini önlemeli ve tehlikeli içeriği algılamalıdır. | OWASP ASVS 5.0 | §5.3 |
Tüm maddeler yorumlanmıştır; NextPDF normatif metni yeniden üretmez. NextPDF hiçbir sertifikasyon iddiasında bulunmaz. CDR, yapılandırılan ilke altında ThreatType tarafından sıralanan etkin-içerik yüzeylerini kaldırır; bu bir yetenektir, sertifikalı bir sanitize edici değil. CDR bir antivirüs tarayıcısı değildir ve kötü amaçlı yazılım imzalarını algılamaz; OWASP ASVS 5.4.3 antivirüs taraması gibi denetimleri tamamlar, karşılamaz. Silahsızlandırılmış bir dosyanın belirli bir alım hattı için kabul edilebilir olup olmadığı, işletmecinin risk kararı olarak kalır.
Geliştirme notları
“Geliştirme notları” başlıklı bölüm- Modül kaynağı
@since 1.9.0taşır; bu başvuru,nextpdf/enterprise3.1.0 ile sevk edilen yüzeyi belgeler. - Her şey konağınızda süreç içinde çalışır. Sanitizasyon sırasında hiçbir ağ erişimi gerçekleşmez.
CdrPolicyveDetectedThreatfinal readonlysınıflardır; sınırları değiştirmek için yeni bir ilke örneği oluşturun.CdrEngine, dedektörünü ve yeniden yapılandırıcısını dahili olarak oluşturur.ThreatDetectorveCdrRebuilder, kendiPdfReadernesnelerini sağlayan aşamalı hatlar için doğrudan kullanılabilir kalır.CdrRebuilder::rebuildöğesinin$policyparametresi şu anda ayrılmıştır; kaynak, onu çağrı-yeri uyumluluğu ve gelecekteki ilke başına seri hâle getirme ayarlamaları için tutulan olarak belgeler.- Çıktı yapısal olarak yeniden üretilebilirdir, bit bakımından yeniden üretilebilir değildir: yeniden üretilen
/ID, kaynak bir tane taşıdığında her çalıştırmada farklıdır. CdrResultsonuç türü (sanitize()öğesinin dönüş değeri) yukarıda davranışsal olarak kapsanmıştır; alanlarıpublic readonlyolup, kolaylık içinhadThreats()vethreatCount()içerir.
Ayrıca bakınız
“Ayrıca bakınız” başlıklı bölüm- İçerik Silahsızlandırma ve Yeniden Yapılandırma (CDR) — iş akışı ve ilke rehberliği içeren yetenek sayfası.
- Güvenlik — Derin Başvuru
- Doğrulama — Derin Başvuru
- Adli İnceleme — Derin Başvuru
Yayın sınırı
“Yayın sınırı” başlıklı bölümBu sayfa yalnızca dışarıdan gözlemlenebilir davranışı ve desteklenen genel API yüzeyini belgeler. Dahili ad alanı yolları, yardımcı sınıflar, mekanizma tabloları, runbook dosya adları ve bilet önekleri kapsam dışıdır.