Güvenlik ve operasyonlar — CodeIgniter 4 üzerinde NextPDF
Bir bakışta
“Bir bakışta” başlıklı bölümBu 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.
Tehdit modeli
“Tehdit modeli” başlıklı bölümSaldırganın etkileyebileceği üç yüzeyi hesaba katmanız gerekir.
- 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.
- 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.
- 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.
Denetim 1 — Kuyruk yükü izin listesi
“Denetim 1 — Kuyruk yükü izin listesi” başlıklı bölümKuyruk 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,
.pdfile 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ümPdfResponse, her Portable Document Format (PDF) yanıtına sabit, sıkılaştırılmış bir başlık kümesi ekler:
| Başlık | Değer |
|---|---|
X-Content-Type-Options | nosniff |
X-Frame-Options | DENY |
Content-Security-Policy | default-src 'none' |
X-Robots-Tag | noindex, nofollow |
Referrer-Policy | no-referrer |
Cache-Control | private, 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.
Denetim 4 — Yapılandırma yolu doğrulaması
“Denetim 4 — Yapılandırma yolu doğrulaması” başlıklı bölümYazı 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ümCodeIgniter 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ı
.envveya bir gizli bilgi yöneticisi aracılığıyla sağlayın. - Üretimde
tsa.allow_insecure_httpdeğerinifalseolarak tutun. Düz metin bir Time Stamping Authority (TSA) kanalı kabul edilebilir değildir. - TSA kararlı bir anahtar yayımladığında
tsa.pinned_public_keysdeğerini ayarlayın.tsa.warn_on_key_rotationdeğerinitrueolarak tutun. - Anahtar dosyasına okuma erişimini uygulama kullanıcısıyla sınırlandırın.
Operasyon kontrol listesi
“Operasyon kontrol listesi” başlıklı bölüm- Çözümlenen tüm sürümleri
composer.lockdosyasında sabitleyin. - İşçileri çalıştıran uygulamada
codeigniter4/queuepaketini 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
mbstringvezlibuzantı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.
Uyumluluk
“Uyumluluk” başlıklı bölüm- 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.
Ticari bağlam
“Ticari bağlam” başlıklı bölümNextPDF ç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>.
Ayrıca bkz.
“Ayrıca bkz.” başlıklı bölüm- /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.