İçeriğe geç

Güvenlik ve operasyonlar — CodeIgniter 4 üzerinde NextPDF

Bu sayfa, bu entegrasyonun dayanıklı olması gereken tehditleri, paket kaynak kodunda doğrulanmış denetimleri ve güvenli bir dağıtım için izlemeniz gereken operasyon kurallarını açıklar.

Saldırganın etkileyebileceği üç yüzeyi hesaba katmanız gerekir.

  1. Kuyruk işi yükü. Bir kuyruk, iş verilerini saklar. Aracıya erişimi olan bir saldırgan bu verileri değiştirebilir. Bunu güvenilmeyen, serisi çözülmüş girdi olarak değerlendirin.
  2. Yanıt dosya adı. Bir kullanıcı indirme dosyasının adını sağlayabilir. Kötü amaçlı bir ad, başlık içeriğine enjeksiyon yapabilir.
  3. Yapılandırma yolları. Yazı tipi yolu ve imzalama yolları yapılandırmadan gelir. Kötü amaçlı bir yol, yanlış konumdan okuma veya yanlış konuma yazma yaptırabilir.

Kuyruk işi, yükü güvenilmeyen, serisi çözülmüş veri olarak değerlendirir. Open Worldwide Application Security Project (OWASP) Application Security Verification Standard (ASVS), serisi çözülmüş güvenilmeyen veriler için güvenli girdi işleme gerektirir (ASVS V1.5.2).

Aşağıdaki denetimler GeneratePdfJob içinde doğrulanır:

  • Oluşturucu, boş olmayan bir dize olmalıdır. İş, başka herhangi bir türü reddeder.
  • Oluşturucu, App\PdfBuilders\<Class>::<method> deseniyle eşleşmelidir. İş, başka herhangi bir ad alanını, düz işlevleri ve ön ek ya da son eke sahip yükleri reddeder.
  • Oluşturucu çağrılabilir olmalıdır. İş, desenle eşleşen ancak çözümlenmeyen bir dizeyi reddeder.

Bu kurallar birlikte, değiştirilmiş bir kuyruk yükü aracılığıyla rastgele kod yürütülmesini engeller. Paket testleri, her reddetme durumunu doğrular.

Denetim 2 — Kuyruk çıktı yolu sınırlandırması

“Denetim 2 — Kuyruk çıktı yolu sınırlandırması” başlıklı bölüm

İş, diske bir dosya yazar. Bir uygulama dosya işlemleri için dosya yolları oluşturduğunda OWASP ASVS, güvenli yol işleme gerektirir (ASVS V5.3.2).

Aşağıdaki denetimler GeneratePdfJob içinde doğrulanır:

  • Çıktı yolu, boş olmayan bir dize olmalıdır.
  • İş, herhangi bir denetimden önce yolu normalleştirir. . ve .. segmentlerini çözümler ve ayırıcıları dönüştürür.
  • Normalleştirilmiş yol, WRITEPATH/pdfs/ içinde yer almalıdır. İş, aynı ad ön ekini paylaşan kardeş bir dizini reddeder (pdfs-evil/).
  • Yol, .pdf ile bitmelidir (büyük/küçük harfe duyarsız).

Bu kurallar, değiştirilmiş bir yük aracılığıyla rastgele dosya yazma işlemlerini engeller.

Denetim 3 — Yanıt başlığı sıkılaştırması

“Denetim 3 — Yanıt başlığı sıkılaştırması” başlıklı bölüm

PdfResponse, her Portable Document Format (PDF) yanıtına sabit, sıkılaştırılmış bir başlık kümesi ekler:

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

Paket, dosya adı başlığa ulaşmadan önce onu temizler. Yol ayırıcılarını, boş baytları ve satır başı/satır besleme (CR/LF) karakterlerini kaldırır. Tırnaklı biçim için çift tırnak işaretlerini kaçış karakteriyle işler. ASCII olmayan bir ad için bir Request for Comments (RFC) 5987 filename*=UTF-8''… parametresi ekler. Boş bir ad, document.pdf olur.

Yazı tipi kaydı, bir fontsPath değerini, bir akış sarmalayıcısı (://) veya boş bayt içeriyorsa reddeder. Çalışma zamanı hatası fırlatır. Bu, php:// veya phar:// gibi sarmalanmış yolları engeller.

Denetim 5 — Asgari servis konumlandırıcı yüzeyi

“Denetim 5 — Asgari servis konumlandırıcı yüzeyi” başlıklı bölüm

CodeIgniter 4, bir PHP Standards Recommendation 11 (PSR-11) kapsayıcısı sağlamaz. Bir Services konumlandırıcısı kullanır. PSR-11 §1.3, servis konumlandırıcı desenini önermez (SHOULD NOT kipi). Paket, konumlandırıcı yüzeyini küçük tutar: her servisin tek bir adlandırılmış fabrika yöntemi vardır. Servisleri denetleyici sınırında çözümleyin. Somut nesneleri içeriye doğru aktarın. Services sınıfını alan koduna aktarmayın.

İmzalama ve TSA işlemleri (NextPDF Pro / Enterprise)

“İmzalama ve TSA işlemleri (NextPDF Pro / Enterprise)” başlıklı bölüm

İmzalama servisi varsayılan olarak etkin değildir. Yalnızca signature.enabled değeri true olduğunda ve signature.certificate boş olmadığında etkinleşir. Paketin varsayılan imza düzeyi B-B şeklindedir. NextPDF Pro, B-B temel imzasını sağlar. Uzun vadeli doğrulama, ayrı bir Enterprise yeteneğidir ve burada değil, Premium referansında belgelenmiştir.

Operasyonel kurallar:

  • Sertifika ve anahtar dosyalarını sürüm denetiminin dışında tutun. Bunları .env veya bir gizli bilgi yöneticisi aracılığıyla sağlayın.
  • Üretimde tsa.allow_insecure_http değerini false olarak tutun. Düz metin bir Time Stamping Authority (TSA) kanalı kabul edilebilir değildir.
  • TSA kararlı bir anahtar yayımladığında tsa.pinned_public_keys değerini ayarlayın. tsa.warn_on_key_rotation değerini true olarak tutun.
  • Anahtar dosyasına okuma erişimini uygulama kullanıcısıyla sınırlandırın.
  • Çözümlenen tüm sürümleri composer.lock dosyasında sabitleyin.
  • İşçileri çalıştıran uygulamada codeigniter4/queue paketini bağımlılık olarak ekleyin.
  • Kuyruk işçisini düşük ayrıcalıklı bir kullanıcı olarak çalıştırın. Yalnızca WRITEPATH/pdfs/ konumuna yazma erişimi verin.
  • İşçiye, web katmanıyla aynı NextPDF uzantılarını sağlayın. İmzalı bir PDF, işçi ortamında NextPDF Pro veya Enterprise gerektirir.
  • PDF oluşturan her çalışma zamanında mbstring ve zlib uzantılarının kullanılabilir olduğunu doğrulayın.
  • Yanıt başlıklarının ters vekil sunucudan bozulmadan geçtiğini doğrulayın.
  • PDF oluşturmayı bağlamla birlikte günlüğe kaydedin. Sertifika materyalini veya anahtar parolalarını günlüğe kaydetmeyin.
  • Kuyruk yükü işleme, OWASP ASVS V1.5.2 ile uyumludur.
  • Kuyruk çıktı yolu işleme, OWASP ASVS V5.3.2 ile uyumludur.
  • Konumlandırıcı tasarımı, PSR-11 §1.3 yönergesini izler.

NextPDF çekirdeği Apache-2.0 altında lisanslanmıştır. İmza güven çapaları ve TSA sıkılaştırması, NextPDF Pro veya Enterprise kurulu olduğunda geçerlidir. CodeIgniter paketi, ilgili servis yöntemlerini sunar; bu yöntemler ilgili Premium paket kurulana kadar null döndürür. Bkz. </get-license/?intent=codeigniter-signing>.

  • /integrations/codeigniter/production-usage/ — doğru kuyruk kaydı ve iş gönderimi.
  • /integrations/codeigniter/configuration/ — imzalama, TSA ve yol anahtarları.
  • /integrations/codeigniter/troubleshooting/ — doğrulanmış reddetme iletileri.
  • /integrations/codeigniter/overview/ — tam API yüzeyi.