Backport oluşturucusunun güvenliği ve işletimi
Derleme araçları — çalışma zamanı bağımlılığı DEĞİLDİR. Bu sayfa, derleme ardışık düzeninin nasıl işletildiğini ve neden güvenilir olduğunu açıklar. Taşınabilir Belge Biçimi (PDF) motorunun kendi güvenlik duruşu burada değil, motorun belgelerinde ele alınır.
Bir bakışta
“Bir bakışta” başlıklı bölümOluşturucu, kendisinin yazmadığı kaynak kodu dönüştürür ve üzerinde geliştirme yapmadığı bir dağıtım üretir. Güvenlik modeli bu sınırdan doğar. Güven sınırı, kaynak kodun çekildiği nokta ve araç zinciridir. Üretilen yapıt salt okunurdur ve makine tarafından üretilir. Genel ve Pro paketleri arasındaki lisanslama ayrımı kodda sabitlenmiştir.
Güven sınırı
“Güven sınırı” başlıklı bölümOluşturucu, kaynak depolarını ve sürümü sabitlenmiş araç zincirini girdi olarak alır. Sonuçta türetilmiş bir yapıt üretir. Üç özellik geçerlidir:
- Üretilen dağıtım salt okunurdur ve makine tarafından üretilir. Bu deponun dalları olarak değil, sürüm etiketleri olarak yayımlanır. Geliştirme, hata bildirimleri ve özellik istekleri, üretilen ağaca değil, her zaman özgün
nextpdf/*kaynak depolarına yönlendirilir. ProjeninREADME.mddosyasındaki dikkat bloğu ve.github/workflows/build.ymldosyası üzerinden doğrulanmıştır (sürüm işi, üretilen ağacı sıfırdan işler ve etiketler). - Sürüm belirtecinin kapsamı dardır.
secrets.BACKPORT_TRIGGER_TOKEN, kaynak depolarının sürüm etiketinden klonlanmasına yetki verir. Yalnızca kaynakları çekme adımlarında kullanılır.build.ymldosyası üzerinden doğrulanmıştır (GH_TOKENkullanımı). - Sürekli tümleştirme (CI) çalıştırıcılarının ayrılması kasıtlıdır. Güvenilen olaylar kendi barındırılan PHP çalıştırıcılarında yürütülür; çatallardan gelen çekme istekleri ve Dependabot çalıştırmaları ise GitHub tarafından barındırılan çalıştırıcılara yönlendirilir. Güvenilmeyen kod, güvenilen çalıştırıcı havuzunda asla yürütülmez.
.github/workflows/0-ci.ymldosyası üzerinden doğrulanmıştır (runs-onkoşulu).
Tedarik zinciri duruşu
“Tedarik zinciri duruşu” başlıklı bölüm- Araç zinciri
composer.jsoniçinde kısıtlanmıştır. Rector^2.0, PHPStan^2.1, PHPUnit^13.0vesymfony/polyfill-*kümesini kullanır. Oluşturucunun hiçbir NextPDF çalışma zamanı bağımlılığı yoktur; bu nedenle güvenliği ihlal edilmiş bir NextPDF çalışma zamanı paketi oluşturucuya erişemez.composer.jsondosyası üzerinden doğrulanmıştır. - Bağımlılık güncellemeleri botlarla yürütülür ve denetimden geçer. Dependabot yapılandırması ve otomatik birleştirme iş akışı mevcuttur. Dependabot çalıştırmaları GitHub tarafından barındırılan çalıştırıcılara sabitlenmiştir ve birleştirmeden önce yine de eksiksiz CI denetiminden (PHPStan, testler, deneme çalıştırması) geçer.
.github/dependabot.ymlve.github/workflows/0-ci.yml,9-dependabot-auto-merge.ymldosyaları üzerinden doğrulanmıştır. - Çıktı, derleme durumunu içermez. Sürüm arşivi,
vendor/ve.git/dışarıda bırakılarak paketlenir. Yayımlanan yapıt, oluşturucunun kendi bağımlılık ağacını değil, kaynağı ve üretilen bildirimi taşır.build.ymldosyası üzerinden doğrulanmıştır (zip ... -x '*/vendor/*' '*/.git/*'). - Statik çözümleme, derleme kodunu denetler.
composer analyse, her iki kalıcı dala yapılan her gönderimde ve çekme isteğinde PHPStan’irector/rulesvescriptsüzerinde 10. düzeyde çalıştırır. Herhangi bir deneme çalıştırmasından önce yürütülür.composer.jsonve0-ci.ymldosyaları üzerinden doğrulanmıştır.
Sözdizimi doğrulama denetimi
“Sözdizimi doğrulama denetimi” başlıklı bölümDerleme ana makinesi, hedeften daha yeni bir PHP sürümü çalıştırdığı için derleme betiği çıktının sözdizimini yerel olarak denetlemez. Belirleyici denetim, sürüm iş akışında yer alır. Derlemeden sonra çalıştırıcı hedef PHP’ye geçer ve php -l komutunu output/src genelinde çalıştırarak herhangi bir ayrıştırma ya da ölümcül hatada sürümü başarısız sayar. Yapıt daha sonra kurulur ve doğrulama dizisi boyunca sınanır: PHP 8.1 hattı için PHP 8.1’den 8.4’e kadar ve PHP 7.4 hattı için PHP 7.4 ve 8.0. Bir hedef çalışma zamanının reddedeceği dağıtım, sürüm aşamasına ulaşmaz. scripts/build.php (validateOutput()) ve .github/workflows/build.yml (sözdizimi denetimi ve validate-* işleri) dosyaları üzerinden doğrulanmıştır.
Bu, ardışık düzenin sınadığı çalışma zamanlarıyla sınırlı, gözlemlenen davranışa dayalı bir güvencedir. Bir uygunluk sertifikası değildir. Dönüştürülen programın doğruluğunu, sözdizimi kabulü ve projenin kendi test takımının ötesinde garanti etmez.
Lisanslama ayrımı
“Lisanslama ayrımı” başlıklı bölümÜretilen iki paket farklı lisanslar taşır; bunlar scripts/adjust-composer.php içinde sabittir:
| Paket | Lisans alanı | Belirleyen |
|---|---|---|
nextpdf/backport | Apache-2.0 | generatePublicComposer() |
nextpdf/backport-pro | proprietary | generateProComposer() |
Oluşturucu deposunun kendisi Apache-2.0 lisanslıdır (composer.jsonlicense). Deponun CHANGELOG.md dosyası, LGPL-3.0-or-later lisansından Apache-2.0 lisansına geçişi kayıt altına alır. Bu değişiklikten önce yayımlanan sürümler eski lisans kapsamında kalır ve erişilebilir olmayı sürdürür; her yeni sürüm ise Apache-2.0 kapsamındadır. Pro dağıtımı tescillidir, yalnızca PHP 8.1 hedefi için üretilir ve phpseclib/phpseclib ^3.0 gerektirir. CHANGELOG.md, composer.json ve scripts/adjust-composer.php dosyaları üzerinden doğrulanmıştır.
İşletimsel güvenceler ve sınırları
“İşletimsel güvenceler ve sınırları” başlıklı bölümArdışık düzenin sunduğu güvenceler, kodun zorunlu kıldığı kapsamla sınırlıdır:
- İlk hatada durma. Derleme, başarısız olan ilk aşamada adı belirtilen bir hatayla iptal edilir. Sürüm işleri başarılı bir derlemeye ve doğrulamaya bağlı olduğu için kısmi bir dağıtım asla yayımlanmaz.
scripts/build.php(step()) vebuild.ymlişininneedsalanı üzerinden doğrulanmıştır. - Sıralı derlemeler.
backport-buildeşzamanlılık grubu,cancel-in-progress: falseayarıyla iki kaynak sürümünün aynı sürüm etiketi için yarışmasını önler.build.ymldosyası üzerinden doğrulanmıştır. - Yeniden üretilebilir girdiler. Ardışık düzen, derlemeden önce her kaynak deposunu ilgili sürüm etiketinden bire bir klonlar.
build.ymldosyası üzerinden doğrulanmıştır (--branch "${TAG}").
İddia etmediği şeyler:
- Standartlara uygunluğu, tam PHP sürümü uyumluluğunu ya da dönüştürülen programın doğruluğunu, sözdizimi kabulü ve test takımının ötesinde iddia etmez.
- Sürüm düşürme, çalışma zamanında zorunlu kılınan değişmezliği kaldırır (
readonlyifadelerinin çıkarılması). Salt okunur bir özelliğe yazma işlemini reddetmek için çalışma zamanına güvenen kod, sürümü düşürülmüş çıktıda bu savunmayı kaybeder. Bu, clone-with güvenliği için belgelenmiş, bilinçli bir ödünleşimdir — bkz. /integrations/backport/troubleshooting/.
Bir sorunu bildirme
“Bir sorunu bildirme” başlıklı bölümOluşturucudaki güvenlik sorunları için deponun SECURITY.md belgesindeki süreç geçerlidir: bunları herkese açık bir sorun olarak değil, bir GitHub güvenlik danışma belgesi aracılığıyla ya da güvenlik iletişim noktası üzerinden bildirin. Üretilen koddaki sorunları özgün kaynak depolarına bildirin; çünkü üretilen ağaç makine çıktısıdır ve üzerinde geliştirme yapılmaz. SECURITY.md ve projenin README.md dosyaları üzerinden doğrulanmıştır.
Sonraki
“Sonraki” başlıklı bölüm- /integrations/backport/overview/ — oluşturucunun ne olduğu ve neler ürettiği.
- /integrations/backport/production-usage/ — sürüm ardışık düzeninin nasıl işletileceği.