compat-legacy için güvenlik ve operasyonlar
Genel bakış
“Genel bakış” başlıklı bölümBağdaştırıcı, NextPDF motorunun güvenlik modelini kullanır ve eski TCPDF 6.2.13 sürümüne kıyasla bilinçli birkaç sıkılaştırma uygular. Bu sayfa, abartıya kaçmadan nelerin kullanılabilir, nelerin kullanılamaz olduğunu tam olarak açıklar. İmzalama bölümünü dikkatle okuyun; kapsam özellikle dar tutulmuştur.
Sıkılaştırılmış eski davranışlar
“Sıkılaştırılmış eski davranışlar” başlıklı bölümBağdaştırıcı, güvenliği artırmak için üç tarihsel TCPDF 6.2.13 davranışını değiştirir. Bunlar güvensiz eski biçimlerine geri dönecek şekilde yapılandırılamaz:
| Konu | Eski TCPDF 6.2.13 | Bağdaştırıcı |
|---|---|---|
| Hata işleme | Error(), die() çağırarak süreci sonlandırır | Error(), RuntimeException fırlatır; çağıranlar başarısızlığı gözlemleyip yakalayabilir, süreç sessizce sonlandırılmaz. |
| HTML yürütme | Bir kaçış yolu, işaretleme içinden PHP çalıştırabilirdi | Bu sabit K_TCPDF_CALLS_IN_HTML, false değerine sabitlenmiştir; işaretleme PHP yürütmesini tetikleyemez. |
| Doğrudan çıktı | Output() etkin çıktı arabelleğine yazar | Çıktı, güvenli bir hedef köprüsü üzerinden geçirilir ve çağıranın denetlediği bir çıktı arabelleğini kirletmez. |
Hata işleme değişikliği, bir başarısızlığı süreç sonlandırması sırasında kaybetmek yerine gözlemleyebilmenizi sağlar. Open Worldwide Application Security Project (OWASP) Application Security Verification Standard (ASVS) 5.0 §16.5.3, bir uygulamanın zarif ve güvenli biçimde başarısız olması ve fail-open durumlarını engellemesi gerektiğini belirtir. Sonlandırmak yerine istisna fırlatma değişikliği bu ilkeyi uygular. HTML sıkılaştırması, bir kod yürütme noktasını kaldırır. Eski davranışa dayanan eski kodu, /integrations/tcpdf-compat/migration/ kapsamında düzeltilmesi gereken bir kusur olarak ele alın. Sabitlenmiş madde özeti, sayfanın ön bilgisindeki citations alanındadır.
Şifreleme
“Şifreleme” başlıklı bölümBağdaştırıcı, TCPDF’nin SetProtection() metodunu kullanıma açar ve NextPDF motorunun standart güvenlik işleyicisine devreder.
- Standart işleyici AES-256 kullanır. Eski
$modeparametresi, metot imzası uyumluluğu için kabul edilir ve yok sayılır; bu metot aracılığıyla daha zayıf bir şifre seçmenin bir yolu yoktur. Katı (strict) mod açık olduğunda, varsayılan olmayan bir$modekullanımı istisna fırlatır; böylece geçişin bunu açıkça ele alması zorunlu olur (tests/Unit/Compat/Tcpdf/TcpdfStrictModeTest.phpiçinde doğrulanır). - Bir sahip parolası sağlanmazsa, bağdaştırıcı kullanıcı parolasını yeniden kullanmak yerine kriptografik olarak güçlü, rastgele bir sahip parolası üretir. Bu, kullanıcı düzeyinde erişimi olanların belge üzerinde sahip düzeyinde denetim elde etmesini önler.
- Sertifika tabanlı (açık anahtarlı) şifreleme yapılmaz; bu,
SetProtection()aracılığıyla gerçekleştirilmez ve bağdaştırıcı bu metodun$pubkeysparametresini yok sayar. Bağdaştırıcıda açılan modern açık anahtarlı şifreleme giriş noktasını (setPublicKeyEncryption()) kullanın; bu giriş noktası motora devreder.
Şifreleme davranışı, ISO 32000-2 §7’de açıklanan standart güvenlik işleyicisini yansıtır. Bu madde, motorun kullandığı şifreleme sözlüğü girdilerini ve AES-256 standart işleyicisini tanımlar. Bu belgeler, çıktının “varsayılan olarak güvenli” veya “kurcalanamaz” olduğunu iddia etmez. Yalnızca kullanılan şifreyi ve kodun uyguladığı sahip parolası davranışını belirtir. Sabitlenmiş madde özeti, sayfanın ön bilgisindeki citations alanındadır.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF();$pdf->AddPage();$pdf->SetFont('helvetica', '', 12);$pdf->Cell(0, 10, 'Encrypted document');
// User password set; owner password auto-generated (strong, random).$pdf->SetProtection([], 'user-secret');
$pdf->Output(__DIR__ . '/encrypted.pdf', 'F');Dijital imzalar — kapsam beyanı
“Dijital imzalar — kapsam beyanı” başlıklı bölümBu bölümü çok dikkatli okuyun. Bilerek ihtiyatlı tutulmuştur.
- TCPDF’nin eski
setSignature()veaddEmptySignatureAppearance()metotları, çekirdek motor üzerindeki bu bağdaştırıcıda uygulanmamıştır. Varsayılan modda hiçbir şey yapmazlar. Katı moddaTcpdfNotImplementedExceptionfırlatırlar. - Dijital imzalama, bu bağdaştırıcı aracılığıyla çekirdek dağıtımın bir yeteneği değildir. Temel (baseline) imza desteği, ticari bir NextPDF sürümü gerektirir.
- Ticari bir sürüm mevcutsa, bağdaştırıcı motora devreden modern bir imza giriş noktası (
setSignatureV2()) açar. Varsayılan profil temel (B-B) profilidir. - Bu belgeler, herhangi bir sürümün bu bağdaştırıcı aracılığıyla zaman damgalı, uzun vadeli doğrulama içeren veya arşivsel imza profilleri ürettiğine dair hiçbir iddiada bulunmaz. Özellikle, B-T, B-LT veya B-LTA davranışı olduğunu ileri sürmez. PDF Advanced Electronic Signatures (PAdES) temel belirtimi §6.1, dört farklı temel düzey tanımlar: B-B, B-T, B-LT ve B-LTA. Her birinin kendi gereksinimleri vardır. B-B temel düzeydir ve daha üst düzeyler (zaman damgası, uzun vadeli, arşivsel) ayrı, daha talepkâr profillerdir. Bu uyumluluk katmanının belgelendirmesi için yalnızca B-B temeli kapsam içindedir. Daha üst düzeyler açıkça kapsam dışıdır ve burada hiçbir sürüm için iddia edilmez. Sabitlenmiş madde özeti, sayfanın ön bilgisindeki
citationsalanındadır. - Bu belgeler hiçbir yerde “sertifikalı”, “garantili”, “yasal olarak geçerli” veya “eIDAS-nitelikli” imza iddiasında bulunmaz. İmzalama doğruluğu, güven çıpası politikası ve yasal geçerlilik, bu uyumluluk katmanının değil, imzalamayı yapan sürümün ve çağıranın Public Key Infrastructure (PKI)‘sının sorumluluğundadır.
Geçişiniz imzalama gerektiriyorsa, bunu ayrı bir iş kolu olarak ele alın: ticari bir sürümde modern imza application programming interface (API)‘sini benimseyin ve elde edilen imzayı bağımsız bir doğrulayıcıyla doğrulayın. TCPDF’nin setSignature() çağrısına güvenmeyin; burada bir no-op’tur.
Eski setTimeStamp() metodu, metot imzası uyumluluğu için kabul edilir ve bir uyarı üretir; bu bağdaştırıcı aracılığıyla zaman damgalı bir imza üretmez.
PDF/A ve uyumluluk
“PDF/A ve uyumluluk” başlıklı bölümYapıcının pdfa bayrağı, metot imzası uyumluluğu için kabul edilir. PDF/A arşivsel uyumluluğu, ticari bir NextPDF sürümü gerektirir. Bağdaştırıcı, motora devreden enablePdfA() metodunu kullanıma açar ve gerekli sürüm yoksa motor, uygulanabilir bir yapılandırma hatası döndürür. Bağdaştırıcı, PDF/A iddiasında bulunurken sessizce uyumsuz bir dosya üretmez.
Çıktı her zaman PDF 2.0’dır (ISO 32000-2). ISO 32000-2 §7.5.2, uyumlu bir yazma aracının belge sürümünü 2.0 olarak tanımladığını ve kaydetme sırasında bunu daha eski bir sürüme düşürmediğini belirtir. Bu nedenle, setPDFVersion() daha eski bir sürümü hedefe alamaz (bkz. /integrations/tcpdf-compat/method-coverage/ §4). Sabitlenmiş madde özeti, sayfanın ön bilgisindeki citations alanındadır.
Operasyonel rehberlik
“Operasyonel rehberlik” başlıklı bölüm- Süreç sonlandırması yok.
Error(),die()çağırmak yerine istisna fırlattığı için, işleme giriş noktalarınıtry/catchiçine sarın ve başarısızlıkları uygulamanızın hata sözleşmesine eşleyin. İşleme başarısız olduğunda isteğin sonlandırılacağını varsaymayın. - Çıktı arabelleği güvenliği.
Output(),Sile bayt döndürür;File bir dosya yazar;Eile base64 bir Multipurpose Internet Mail Extensions (MIME) gövdesi döndürür;I/Dile motor çıktı yolu üzerinden yönlendirir. İşçilerde ve Hypertext Transfer Protocol (HTTP) işleyicilerinde yanıtı kendiniz denetleyebilmek içinSveyaFtercih edin; bkz. /integrations/tcpdf-compat/production-usage/. - Katı mod bir üretim ayarı değildir. Bunu bir continuous integration (CI) veya denetim işiyle sınırlı tutun. Bir üretim işleme yolunda oluşan istisna, sessizce zayıflatılan bir parametreden daha kötüdür.
- Sabit hijyeni.
PDF_*/K_*sabitlerini ilk bağdaştırıcı yapımından önce tanımlayın. Sıkılaştırılmış iki bayrak (K_TCPDF_CALLS_IN_HTML,K_TCPDF_THROW_EXCEPTION_ERROR) gevşetilemez; onları gevşetmeye çalışmayın. - Rastgele sahip parolaları. Belirli (deterministik) bir sahip parolasına güveniyorsanız, onu açıkça ayarlayın. Aksi takdirde, belge başına güçlü ve rastgele bir parola üretilir ve bu geri kazanılamaz.
Tehdit modeli notları
“Tehdit modeli notları” başlıklı bölüm- Söz konusu Görüntü metotları için, bağdaştırıcı herhangi bir dosya sistemi okumasından önce bir akış sarmalayıcı (stream-wrapper) yolunu reddeder. Görüntü türü algılama (
TcpdfImages::getImageFileType), herscheme://yolunu —phar://,php://ve diğer PHP akış sarmalayıcıları dahil — bir sarmalayıcı olarak ele alır vefile_get_contents/getimagesizedenetimini atlayarak yalnızca uzantıya dayalı çıkarıma geri döner. Bu, PHP 7.4 geriye-port hedefinde bir phar meta verisi ters serileştirme (deserialization) vektörünü kapatır; motor, sarmalayıcı yolu gömme işlemini kendisi reddeder. - Bağdaştırıcı, görüntü veya çıktı metotlarına geçirilen dosya yolları için motorun yaptığının ötesinde bir yol doğrulaması veya temizliği eklemez. Çağıran tarafından sağlanan yolları ve URL’leri, uygulama sınırınızda güvenilmez olarak ele alın.
- HTML metotlarına geçirilen HTML, bir TCPDF HTML çözümleyicisi tarafından değil, motor tarafından işlenir. Eski PHP yürütme noktası kapatılmıştır, ancak yine de çağıran tarafından sağlanan HTML’i güvenilmez girdi olarak ele almalısınız.
- Şifreleme, standart işleyici altında belgenin durağan haldeki gizliliğini korur. Bu, uygulamanızdaki aktarım güvenliğinin veya erişim denetiminin yerine geçmez.
Ayrıca bakınız
“Ayrıca bakınız” başlıklı bölüm- /integrations/tcpdf-compat/method-coverage/ — şu metotların tam davranışı:
SetProtection(),setSignature() - /integrations/tcpdf-compat/configuration/ — iki sıkılaştırılmış, yapılandırılamaz bayrak
- /integrations/tcpdf-compat/production-usage/ — işçiler, arabellekler, başarısızlık işleme
docs/TCPDF_COVERAGE.md— otoritatif kapsam matrisi- Paket
NOTICE— bağımsız uygulama beyanı