Lewati ke konten

Keamanan dan Operasi NextPDF Symfony

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.

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:

HeaderNilai
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

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.pdf tidak dapat meloloskan diri.
  • Ekstensi .pdf ditambahkan jika tidak ada; ekstensi yang sudah ada tidak diduplikasi, termasuk .PDF dalam 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.

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);
  • builderClass yang 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.

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.

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.enabled bernilai true dan signature.certificate disetel; 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.

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.

  • 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-mbstring dan ext-zlib tetap aktif (jika tidak, bundel akan gagal lebih awal).
  • Sematkan satu versi mayor nextpdf/core di aplikasi agar versi mesin bersifat deterministik di seluruh penerapan.

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.

SpesifikasiKlausulreference_idKlaim
PSR-11psr_11_container#1.1.2.p5has() false menyiratkan get() melempar NotFoundException
PSR-3psr_3_logger#x3.p17Kolaborator logger opsional

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>.

  • /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.