Keamanan dan Operasi NextPDF Symfony
Sekilas pandang
Bagian berjudul “Sekilas pandang”Helper respons menerapkan serangkaian header keamanan tetap. Objek transfer data (DTO) pesan asinkron memvalidasi jalur keluarannya dua kali. Penandatanganan bersifat opsional dan, pada tingkat Pro, terbatas pada profil dasar yang didokumentasikan di sini.
Header keamanan respons HTTP
Bagian berjudul “Header keamanan respons HTTP”NextPDF\Symfony\Http\PdfResponse menerapkan kumpulan header yang sama pada setiap respons yang dibangunnya: inline, unduhan, dan kedua varian aliran. Konstanta sumber memverifikasi header persis berikut:
| Header | Nilai |
|---|---|
Cache-Control | private, max-age=0, must-revalidate |
Pragma | public |
X-Content-Type-Options | nosniff |
X-Frame-Options | DENY |
Content-Security-Policy | default-src 'none' |
X-Robots-Tag | noindex, nofollow |
Referrer-Policy | no-referrer |
Header ini mengurangi risiko penebakan (sniffing) content-type, pembingkaian (framing), pengindeksan, dan kebocoran referrer untuk dokumen yang dihasilkan. Varian dengan buffer juga menetapkan Content-Type: application/pdf dan Content-Length. Varian aliran menetapkan tipe konten dan secara sengaja menghilangkan Content-Length.
Bundel menetapkan kumpulan header ini secara tetap. Untuk menambah atau mengubah header, seperti Cache-Control yang lebih ketat untuk unduhan terautentikasi, ubah Response yang dikembalikan oleh pengontrol Anda sebelum mengembalikannya.
Content-Disposition dan penanganan nama berkas
Bagian berjudul “Content-Disposition dan penanganan nama berkas”PdfResponse membangun header Content-Disposition secara defensif. PdfResponseTest memverifikasi perilaku ini:
- Nama berkas disanitasi; pemisah jalur dan urutan traversal dihilangkan, sehingga nama berkas seperti
../../../etc/passwd.pdftidak dapat meloloskan diri. - Ekstensi
.pdfditambahkan jika tidak ada; ekstensi yang sudah ada tidak diduplikasi, termasuk.PDFdalam huruf besar. - Tanda kutip ganda dan garis miring terbalik di-escape untuk bentuk quoted-string.
- Nama berkas non-ASCII mendapat cadangan ASCII dan varian
filename*=UTF-8''RFC-5987 (Request for Comments 5987). - Nama berkas yang kosong dialihkan ke
document.pdf.
Berikan nama berkas yang dipengaruhi pengguna hanya setelah pemeriksaan otorisasi di tingkat aplikasi Anda. Bundel melakukan sanitasi demi keamanan header, bukan untuk kontrol akses.
Validasi jalur keluaran asinkron
Bagian berjudul “Validasi jalur keluaran asinkron”NextPDF\Symfony\Message\GeneratePdfMessage memvalidasi jalur keluaran di konstruktornya. NextPDF\Symfony\Message\GeneratePdfHandler memvalidasinya kembali saat eksekusi sebelum menulis. Konstruktor menolak:
- jalur kosong atau jalur yang mengandung byte null;
- skema stream-wrapper seperti
php://...; - segmen traversal
..yang menggunakan pemisah/maupun\; - jalur yang tidak berakhiran
.pdf(tidak peka huruf besar/kecil); builderClassyang bukan merupakan nama kelas yang valid secara sintaksis.
Validasi kedua di handler penting karena pesan dapat tetap berada dalam antrean antara pengiriman dan konsumsi. Handler tidak memercayai jalur yang diantrekan dan menerapkan kembali pemeriksaan jalur sebelum menyimpan. Jalankan worker di bawah akun sistem berkas dengan hak istimewa paling minim yang dibatasi pada direktori keluaran yang dimaksud.
Batasan resolusi builder
Bagian berjudul “Batasan resolusi builder”GeneratePdfHandler meresolusi builder dari pencari layanan (service locator) PHP Standard Recommendation 11 (PSR-11) yang diberi kunci berdasarkan nama kelas dan menolak apa pun yang bukan PdfBuilderInterface. Karena pencari layanan hanya mengekspos builder yang terdaftar, builderClass yang dikendalikan penyerang pada payload transport yang dirusak tidak dapat menginstansiasi kelas sembarang. Berdasarkan PSR-11, ketika kontainer melaporkan bahwa suatu id tidak ada, resolusinya akan gagal alih-alih diam-diam mengembalikan sesuatu yang tidak diharapkan (PSR-11 §1.1.2). Daftarkan hanya kelas builder tepercaya di pencari layanan.
Postur penandatanganan digital opsional
Bagian berjudul “Postur penandatanganan digital opsional”Penandatanganan digital bukan bagian dari bundel inti. Fitur ini aktif hanya ketika nextpdf/premium (yang memasang tingkat Pro) tersedia dan compiler pass mendeteksi kelas penandatanganan Pro. Dengan bundel dan tingkat Pro terpasang, konfigurasi penandatanganan yang didukung dan didokumentasikan adalah profil dasar B-B.
Node konfigurasi signature.level menerima nilai string tambahan demi kompatibilitas skema di seluruh rangkaian konfigurasi NextPDF. Kemampuan penandatanganan yang disediakan dan didukung oleh bundel ini adalah B-B. Dokumentasi NextPDF Premium membahas profil penandatanganan di luar B-B, beserta persyaratan dan pertimbangan operasionalnya. Profil-profil tersebut sengaja tidak dijelaskan di sini.
Catatan operasional untuk jalur penandatanganan B-B:
- Penanda tangan didaftarkan hanya ketika
signature.enabledbernilai true dansignature.certificatedisetel; jika tidak, bagian ini tidak aktif. - Sediakan sertifikat, kunci privat, dan kata sandi melalui Symfony secrets atau variabel lingkungan. Jangan pernah meng-commit materi tersebut ke repositori.
- Batasi izin baca pada material kunci hanya untuk akun aplikasi.
Pencatatan log opsional
Bagian berjudul “Pencatatan log opsional”Registri fon dan gambar menerima Psr\Log\LoggerInterface opsional yang diikat dengan nullOnInvalid(). Jika tersedia, logger tersebut merupakan kolaborator yang dapat ditukar di bawah kontrak logger PHP Standard Recommendation 3 (PSR-3) (PSR-3). Bersihkan data yang mengidentifikasi pengguna dari konteks log apa pun yang Anda tambahkan di sekitar pembuatan dokumen; bundel tidak mencatat isi dokumen.
Daftar periksa pengerasan operasional
Bagian berjudul “Daftar periksa pengerasan operasional”- Pertahankan header respons yang tetap; tambahkan caching yang lebih ketat untuk unduhan terautentikasi di pengontrol.
- Otorisasi permintaan sebelum membuat atau mengembalikan dokumen; bundel tidak melakukan kontrol akses.
- Simpan material kunci penandatanganan di Symfony secrets / variabel lingkungan dengan izin berkas hak istimewa paling minim.
- Jalankan worker Messenger di bawah akun hak istimewa paling minim dengan akses tulis yang dibatasi pada direktori keluaran.
- Pastikan
ext-mbstringdanext-zlibtetap aktif (jika tidak, bundel akan gagal lebih awal). - Sematkan satu versi mayor
nextpdf/coredi aplikasi agar versi mesin bersifat deterministik di seluruh penerapan.
Kesesuaian
Bagian berjudul “Kesesuaian”Setiap baris merupakan klaim normatif yang dibuat pada halaman ini, disematkan pada reference_id 64-heksadesimal penuh dari korpus standards development organization (SDO) yang aksesnya dibatasi. Provenans (manifes korpus, transport pengambilan) ada di _sidecars/rag-citations.yaml.
| Spesifikasi | Klausul | reference_id | Klaim |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p5 | has() false menyiratkan get() melempar NotFoundException | |
| PSR-3 | psr_3_logger#x3.p17 | Kolaborator logger opsional |
Konteks komersial
Bagian berjudul “Konteks komersial”Penandatanganan digital tersedia hanya ketika nextpdf/premium (Pro) terpasang; profil yang disediakan oleh bundel ini adalah dasar B-B. Kemampuan Pro opsional ini tidak memerlukan perubahan kode pada bundel Core yang didokumentasikan di sini. Lihat </get-license/?intent=symfony-pro>.
Lihat juga
Bagian berjudul “Lihat juga”- /integrations/symfony/production-usage/ — keamanan worker dan streaming.
- /integrations/symfony/configuration/ — tabel signature, tsa, dan service.
- /integrations/symfony/troubleshooting/ — mendiagnosis masalah penandatanganan dan Messenger.
- /integrations/symfony/integration/ — referensi wiring menyeluruh.