İçeriğe geç

Motorun tehdit modeli

Bu sayfa, NextPDF çekirdek motorunun tehdit modelini tanımlar. Motorun, saldırganın etkileyebildiği girdileri işlerken kapsam içinde değerlendirdiği saldırı sınıflarını listeler: Köprü Metni İşaretleme Dili (HTML), Basamaklı Stil Sayfaları (CSS), Ölçeklenebilir Vektör Grafikleri (SVG), yazı tipleri, görüntüler ve mevcut Taşınabilir Belge Biçimi (PDF) dosyaları. Her harici kaynak yeteneği için varsayılan duruşu belirtir ve her sınıfı azaltan kod içi korumayı gösterir.

Sınır. Bir tehdit modeli, göz önünde bulundurulan tehditleri ve bunlara uygulanan azaltma önlemlerini kaydeder. Güvenlik açıklarının bulunmadığını ileri sürmez. Burada listelenmeyen bir sınıfın yokluğu kanıtlanmış değildir; modelin mevcut kapsamı dışında kalıyor olabilir. Uygulanmamış özellikler yayımlanmadan önce resmi bir tehdit incelemesinden geçirilir. Bu sayfayı bir güvenlik kanıtı olarak değil, kasıtlı tasarımın kaydı olarak değerlendirin.

Terminal window
composer require nextpdf/core:^3

Burada açıklanan korumalar çekirdek paketin bir parçasıdır. Bunları etkinleştirmek için ek bir bağımlılığa ihtiyacınız yoktur. Varsayılan olarak açıktırlar.

Model, Açık Dünya Çapında Uygulama Güvenliği Projesi (OWASP) tehdit modelleme sürecini izler (owasp_threat_modeling#x1.x11.p6): sistem, güvenilmeyen girdinin bir güven sınırını aştığı noktalara ayrıştırılır, her sınırdaki tehditler sayılır ve azaltma önlemi kaydedilir.

Motorun birincil güven sınırı belge alımıdır: başka bir yerde hazırlanmış içeriğin bulunduğu herhangi bir yer — uzak bir stil sayfası, bir @font-face kaynağı, bir <image href>, gömülü bir Genişletilebilir İşaretleme Dili (XML) faturası ya da incelenecek bir PDF — motorun veri getirmesine, ayrıştırmasına veya açmasına yol açabilir. Belirleyici ilke varsayılan-reddet duruşudur: her harici kaynak yeteneği, siz bir ilke nesnesi aracılığıyla açıkça etkinleştirene kadar kapalıdır. Bu, Ulusal Standartlar ve Teknoloji Enstitüsü (NIST) SP 800-53 Rev. 5 CM-7 (nist_sp_800_53r5#x4.x182.p14) belgesindeki en az işlevsellik temel çizgisini bir işleme motoruna uygular: güvenli varsayılan en katı konumdur. Bir yeteneği açmak sizin açık kararınızdır.

Tehdit modeli bir uygulama programlama arabirimi (API) değildir. Bu modeli ifade eden ilke nesneleri, modül sayfalarında belgelenmiştir. Güvenlikle ilgili giriş noktaları, harici kaynak ilkesi sözleşmesi (ExternalResourcePolicyInterface, tümünü-reddet varsayılanı olarak DefaultExternalResourcePolicy ile) ile Tekdüzen Kaynak Konumlandırıcı (URL) ve XML korumalarıdır (UrlValidator, XmlGuard). Bu sayfa bu bileşenlerin davranışına atıfta bulunur; imzalarını yeniden belgelemez.

Güvenli duruş varsayılandır. Bunu elde etmek için kod yazmanız gerekmez:

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Html\DefaultExternalResourcePolicy;
// Out of the box: @font-face blocked, @import blocked, background-image
// blocked, SVG external refs blocked. A document that tries to fetch a
// remote resource gets a system-font fallback or an ignored rule — not an
// outbound request.
$policy = new DefaultExternalResourcePolicy();

Bir yeteneği açmak kasıtlı ve dar kapsamlı bir eylemdir. Üretimde, Güvenli Köprü Metni Aktarım Protokolü (HTTPS) üzerinden bir içerik dağıtım ağında (CDN) barındırılan bir web yazı tipine izin vermeniz gerekiyorsa, bunu açıkça kabul edin ve kapsamını sınırlayın:

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Html\DefaultExternalResourcePolicy;
// Explicit, scoped opt-in. The HTTPS scheme is required; size and glyph
// caps still apply; the URL still passes the SSRF guard before any fetch.
$policy = (new DefaultExternalResourcePolicy())
->withFontFaceAllowed(['https']);
  • Uygulanmamış olmak, kazara güvenli olmakla aynı şey değildir. CSS background-image url() gibi yetenekler uygulanmamıştır; bu nedenle mevcut bir saldırı yüzeyi yoktur. Yine de gelecekte uygulanmadan önce resmi bir tehdit kapısından geçmeleri gerektiği belgelenmiştir. Kodun yokluğu bugün için azaltma önlemidir, kalıcı bir garanti değildir.
  • Alan Adı Sistemi (DNS) yeniden bağlama, hareketli bir hedeftir. UrlValidator, ana bilgisayar adını çözer ve çözümlenen İnternet Protokolü (IP) adresini döndürür; böylece çağıran taraf bağlantıyı sabitleyebilir (CURLOPT_RESOLVE) ve doğrula-sonra-getir akışındaki kontrol-zamanından kullanım-zamanına (TOCTOU) penceresi kapatılır. Bu mutlak değil, en iyi çaba düzeyinde bir savunmadır. İzin verici bir çıkış proxy’sinin arkasındaki bir operatör, kitaplığın göremediği dahili ana bilgisayarlara yine de ulaşabilir.
  • İzin bitleri, erişim denetimi değildir. “Kopyalamayı engelleyen” bir belge, zorlamaya değil, okuyucunun iş birliğine dayanır. Bu, güvenlik modelinde ele alınmıştır. Yaygın bir tehdit modeli yanılgısı olduğu için burada özellikle belirtilir.

Korumalar hızlı başarısız olacak şekilde davranır ve iş miktarını sınırlar: XML koruması, ayrıştırmadan önce bir belge türü bildirimini (DOCTYPE) reddeder ve girdi boyutunu sınırlar; görüntü yolu, açma işleminden önce bir megapiksel ve bayt üst sınırı uygular; URL koruması, herhangi bir yuva açılmadan önce şemaya ve ana bilgisayara göre reddeder. Güvenli varsayılanın maliyeti, yavaş bir istek değil, reddedilen bir istektir.

Geçerli olduğu yerlerde Ortak Zayıflık Sıralaması (CWE) ve OWASP referanslarıyla birlikte, göz önünde bulundurulan saldırı sınıfları ve bunların kod içi azaltma önlemleri:

Tehdit sınıfı (CWE / OWASP)PDF motorundaki vektörKod içi koruma
Sunucu taraflı istek sahteciliği (SSRF) (OWASP Top 10 2025; owasp_top10_2025#x3.x1.p26)@font-face/@import/url() ögesinin 169.254.169.254 adresine veya bir dahili ana bilgisayara işaret etmesi; zaman damgası yetkilisi (TSA), Çevrimiçi Sertifika Durumu Protokolü (OCSP) ve sertifika iptal listesi (CRL) getiricileriUrlValidator::validateExternalUrl(), özel, ayrılmış, geri döngü ve bağlantı-yerel aralıklarını ve bulut meta veri uç noktalarını engeller; tehlikeli şemaları reddeder; DNS’yi çözer; ve bağlantı sabitleme için IP’yi döndürür
XML harici varlık (XXE) (cwe_top25_2025#x28.x2.p42)Gömülü bir XML faturasında veya Genişletilebilir Meta Veri Platformu (XMP) paketinde harici varlıklar ya da DOCTYPEXmlGuard::loadXml(), LIBXML_NONET uygular, herhangi bir DOCTYPE bildirimini doğrudan reddeder, XML 1.0 tarafından yasaklanan denetim karakterlerini reddeder ve bir girdi boyutu üst sınırı uygular
Sıkıştırma açma bombası100 MP’lik bir yükü gizleyen 1×1 görüntü; aşırı büyük Web Open Font Format 2 (WOFF2)Görüntü yolu, açma işleminden önce bir megapiksel üst sınırı ve bir bayt üst sınırı uygular; yazı tipi yolu, dosya boyutunu ve glif sayısını sınırlar
Dizin gezinmefile:///etc/passwd, bir yazı tipi veya SVG aracılığıyla yüklenen srcHarici kaynaklar için varsayılan duruş tümünü-reddet şeklindedir; yerel dosya yolları, açıkça etkinleştirildiğinde bir dizin izin listesine karşı realpath() aracılığıyla çözümlenir
İçerik enjeksiyonuBir PDF operatöründen kaçan, özel olarak hazırlanmış dize; data:/javascript: hrefÜretim sırasında PDF dizesinin kaçışlanması; ek açıklamalarda şema izin listesi ve href temizliği

Varsayılanlar, harici kaynaklar için tümünü-reddet duruşu oluşturur: yazı tipi, @import, background-image ve SVG harici referansları, kodla birlikte sürdürülen güvenlik özelliği kapsam matrisinde açıklandığı üzere, siz şema bazında kabul edene kadar kapalı kalır.

Bu sayfa, göz önünde bulundurulan tehditleri belgeler. Bir sızma testi raporu değildir ve listelenen azaltma önlemlerinin eksiksiz olduğunu ya da başka hiçbir zayıflık sınıfının geçerli olmadığını iddia etmez.

Bu bir uygunluk profili değildir. Tehdit modeli, OWASP tehdit modelleme süreci ve CWE Top 25 zayıflık sınıflandırmasından (cwe_top25_2025#x28.x2.p42) yararlanır; herhangi bir güvenlik sertifikasyon şemasına uygunluk iddia etmez. Bağımsız değerlendirme bu belgenin değil, bir denetimin konusudur.