İçeriğe geç

NextPDF Symfony güvenliği ve operasyonları

Yanıt yardımcıları, sabit bir güvenlik başlığı kümesi uygular. Eşzamansız mesajın veri aktarım nesnesi (DTO), çıktı yolunu iki kez doğrular. İmzalama isteğe bağlıdır ve Pro katmanında burada belgelenen temel profille sınırlıdır.

NextPDF\Symfony\Http\PdfResponse, oluşturduğu her yanıta aynı başlık kümesini uygular: satır içi, indirme ve iki akışlı türev. Kaynak sabiti tam olarak şu başlıkları tanımlar:

BaşlıkDeğer
Cache-Controlprivate, max-age=0, must-revalidate
Pragmapublic
X-Content-Type-Optionsnosniff
X-Frame-OptionsDENY
Content-Security-Policydefault-src 'none'
X-Robots-Tagnoindex, nofollow
Referrer-Policyno-referrer

Bu başlıklar, oluşturulan belgelerde content-type koklamasını, çerçevelemeyi, dizinlemeyi ve yönlendiren sızıntısını azaltır. Arabelleğe alınan türevler ayrıca Content-Type: application/pdf ve Content-Length başlıklarını da ayarlar. Akışlı türevler içerik türünü ayarlar ve tasarım gereği Content-Length başlığını dahil etmez.

Paket bu başlık kümesini sabitler. Kimliği doğrulanmış indirmeler için daha katı bir Cache-Control gibi başlıklar eklemek veya değiştirmek istiyorsanız, döndürülen Response nesnesini denetleyicinizde döndürmeden önce değiştirin.

PdfResponse, Content-Disposition başlığını savunmacı biçimde oluşturur. PdfResponseTest bu davranışı doğrular:

  • Dosya adı temizlenir; yol ayırıcılar ve gezinme dizileri çıkarılır, böylece ../../../etc/passwd.pdf gibi bir dosya adı dizinin dışına çıkamaz.
  • Uzantı yoksa bir .pdf uzantısı eklenir; mevcut bir uzantı, büyük harfli bir .PDF dâhil, yinelenmez.
  • Tırnaklı dize biçimi için çift tırnaklar ve ters eğik çizgiler kaçışlanır.
  • ASCII dışı dosya adları bir ASCII yedeği ve bir RFC-5987 (Request for Comments 5987) filename*=UTF-8'' türevi alır.
  • Boş bir dosya adı document.pdf değerine geri döner.

Kullanıcının etkileyebildiği bir dosya adını yalnızca uygulama düzeyindeki yetkilendirme denetiminizden sonra geçirin. Paket, erişim denetimi için değil, başlık güvenliği için temizleme yapar.

NextPDF\Symfony\Message\GeneratePdfMessage, çıktı yolunu kurucusunda doğrular. NextPDF\Symfony\Message\GeneratePdfHandler, yazmadan önce çalışma zamanında bunu yeniden doğrular. Bu doğrulama şunları reddeder:

  • boş yol veya boş bayt içeren bir yol;
  • örneğin php://... gibi bir akış sarmalayıcı şeması;
  • bir .. gezinme bölümü için ayırıcı olarak / veya \ kullanan;
  • uzantısı .pdf olmayan bir yol (büyük/küçük harfe duyarsız);
  • sözdizimsel olarak geçerli bir sınıf adı olmayan bir builderClass.

İşleyicideki ikinci doğrulama önemlidir, çünkü bir mesaj gönderim ile tüketim arasında kuyrukta kalıcı olarak bekleyebilir. İşleyici, kuyruğa alınmış yola güvenmez ve kaydetmeden önce yol korumasını yeniden uygular. Çalışanları, hedef çıktı diziniyle sınırlandırılmış en az ayrıcalıklı bir dosya sistemi hesabı altında çalıştırın.

GeneratePdfHandler, oluşturucuları sınıf adına göre anahtarlanan bir PHP Standart Önerisi 11 (PSR-11) hizmet bulucusundan çözer ve PdfBuilderInterface olmayan her şeyi reddeder. Bulucu yalnızca kayıtlı oluşturucuları açığa çıkardığı için, kurcalanmış bir taşıma yükündeki saldırgan denetimli builderClass rastgele bir sınıfı örnekleyemez. PSR-11 kapsamında, bir kapsayıcı bir kimliğin mevcut olmadığını bildirdiğinde, onu çözümlemek beklenmeyen bir şeyi sessizce döndürmek yerine başarısız olur (PSR-11 §1.1.2). Bulucuya yalnızca güvenilen oluşturucu sınıflarını kaydedin.

Dijital imzalama, çekirdek paketin bir parçası değildir. Yalnızca nextpdf/premium (Pro katmanını kuran) mevcut olduğunda ve derleyici geçişi Pro imzalama sınıflarını algıladığında etkinleşir. Paket Pro katmanıyla birlikte kurulu olduğunda, desteklenen ve belgelenen imzalama yapılandırması temel B-B profilidir.

Yapılandırma düğümü signature.level, NextPDF yapılandırma ailesi genelinde şema uyumluluğu için ek dize değerlerini kabul eder. Bu paketin sunduğu ve desteklediği imzalama yeteneği B-B’dir. NextPDF Premium belgeleri, B-B’nin ötesindeki imzalama profillerini, bunların gereksinimlerini ve operasyonel değerlendirmelerini kapsar. Bunlar burada özellikle açıklanmamıştır.

B-B imzalama yolu için operasyonel notlar:

  • İmzalayıcı yalnızca signature.enabled doğru olduğunda ve signature.certificate ayarlandığında kaydedilir; aksi takdirde bölümün etkisi yoktur.
  • Sertifikayı, özel anahtarı ve parolayı Symfony gizli bilgileri veya ortam değişkenleri aracılığıyla sağlayın. Bunları asla depoya işlemeyin.
  • Anahtar malzemesi üzerindeki okuma izinlerini uygulama hesabıyla sınırlayın.

Yazı tipi ve görüntü kayıt defterleri, Psr\Log\LoggerInterface türünden, nullOnInvalid() ile bağlanmış isteğe bağlı bir bağımlılık kabul eder. Mevcut olduğunda, PHP Standart Önerisi 3 (PSR-3) günlükleyici sözleşmesi (PSR-3) kapsamında değiştirilebilir bir iş ortağıdır. Belge oluşturma sırasında eklediğiniz her günlük bağlamından kullanıcıyı tanımlayan verileri temizleyin; paket belge içeriğini günlüğe kaydetmez.

  • Sabit yanıt başlıklarını koruyun; kimliği doğrulanmış indirmeler için denetleyicide daha katı önbelleğe almayı ayrıca uygulayın.
  • Bir belgeyi oluşturmadan veya döndürmeden önce isteği yetkilendirin; paket erişim denetimi gerçekleştirmez.
  • İmzalama anahtarı malzemesini, en az ayrıcalıklı dosya izinleriyle Symfony gizli bilgilerinde / ortam değişkenlerinde saklayın.
  • Messenger çalışanlarını, yazma erişimi çıktı diziniyle sınırlı, en az ayrıcalıklı bir hesap altında çalıştırın.
  • Şu uzantıları etkin tutun: ext-mbstring ve ext-zlib (aksi takdirde paket hızla başarısız olur).
  • Motor sürümünün dağıtımlar genelinde deterministik kalması için uygulamada tek bir nextpdf/core ana sürümünü sabitleyin.

Her satır, bu sayfada yapılan ve kapılı standart geliştirme kuruluşu (SDO) külliyatından gelen tam 64 onaltılık bir reference_id değerine sabitlenmiş normatif bir iddiadır. Köken bilgisi (külliyat bildirimi, alma taşıması) _sidecars/rag-citations.yaml içindedir.

BelirtimMaddereference_idİddia
PSR-11psr_11_container#1.1.2.p5has() false olduğunda get() NotFoundException fırlatır
PSR-3psr_3_logger#x3.p17İsteğe bağlı günlükleyici iş ortağı

Dijital imzalama yalnızca nextpdf/premium (Pro) kurulu olduğunda kullanılabilir; bu paketin sunduğu profil temel B-B’dir. Bu isteğe bağlı Pro yeteneği, burada belgelenen Core paketinde herhangi bir kod değişikliği gerektirmez. Bkz. </get-license/?intent=symfony-pro>.

  • /integrations/symfony/production-usage/ — çalışan güvenliği ve akış.
  • /integrations/symfony/configuration/ — signature, tsa ve service tabloları.
  • /integrations/symfony/troubleshooting/ — imzalama ve Messenger sorunlarını tanılama.
  • /integrations/symfony/integration/ — uçtan uca bağlantı referansı.