Keamanan dan operasi — NextPDF di CodeIgniter 4
Gambaran singkat
Bagian berjudul “Gambaran singkat”Halaman ini menjelaskan ancaman yang harus ditangkal oleh integrasi ini, kontrol yang telah diverifikasi dalam kode sumber paket, serta aturan operasional yang sebaiknya Anda ikuti untuk penerapan yang aman.
Model ancaman
Bagian berjudul “Model ancaman”Anda perlu memperhitungkan tiga permukaan serangan yang dapat dipengaruhi penyerang.
- Payload job antrean. Antrean menyimpan data job. Penyerang yang memiliki akses ke broker dapat mengubah data tersebut. Perlakukan data itu sebagai input hasil deserialisasi yang tidak tepercaya.
- Nama berkas respons. Pengguna dapat memberikan nama berkas unduhan. Nama yang berbahaya dapat menyuntikkan konten header.
- Jalur konfigurasi. Jalur fon dan jalur penandatanganan berasal dari konfigurasi. Jalur yang berbahaya dapat menyebabkan pembacaan dari atau penulisan ke lokasi yang salah.
Kontrol 1 — Daftar izin payload antrean
Bagian berjudul “Kontrol 1 — Daftar izin payload antrean”Job antrean memperlakukan payload-nya sebagai data hasil deserialisasi yang tidak tepercaya. Open Worldwide Application Security Project (OWASP) Application Security Verification Standard (ASVS) mensyaratkan penanganan input yang aman untuk data hasil deserialisasi yang tidak tepercaya (ASVS V1.5.2).
Kontrol yang terverifikasi di GeneratePdfJob:
- Builder harus berupa string yang tidak kosong. Job menolak tipe lainnya.
- Builder harus sesuai dengan pola
App\PdfBuilders\<Class>::<method>. Job menolak namespace lain, fungsi biasa, serta payload yang memiliki prefiks atau sufiks. - Builder harus dapat dipanggil (callable). Job menolak string yang sesuai dengan pola tetapi tidak dapat diselesaikan.
Bersama-sama, aturan-aturan ini memblokir eksekusi kode sembarang melalui payload antrean yang dimanipulasi. Pengujian paket memverifikasi setiap kasus penolakan.
Kontrol 2 — Pembatasan jalur keluaran antrean
Bagian berjudul “Kontrol 2 — Pembatasan jalur keluaran antrean”Job menulis berkas ke disk. OWASP ASVS mensyaratkan penanganan jalur yang aman ketika aplikasi membuat jalur berkas untuk operasi berkas (ASVS V5.3.2).
Kontrol yang terverifikasi di GeneratePdfJob:
- Jalur keluaran harus berupa string yang tidak kosong.
- Job menormalkan jalur sebelum melakukan pemeriksaan apa pun. Job menyelesaikan segmen
.dan..serta mengonversi pemisah jalur. - Jalur yang dinormalkan harus berada di dalam
WRITEPATH/pdfs/. Job menolak direktori sejajar yang memiliki prefiks nama yang sama (pdfs-evil/). - Jalur harus berakhir dengan
.pdf(tidak peka huruf besar/kecil).
Aturan-aturan ini memblokir penulisan berkas sembarang melalui payload yang dimanipulasi.
Kontrol 3 — Pengerasan header respons
Bagian berjudul “Kontrol 3 — Pengerasan header respons”PdfResponse melampirkan kumpulan header tetap yang diperkeras pada setiap respons Portable Document Format (PDF):
| Header | Nilai |
|---|---|
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 membersihkan nama berkas sebelum nama tersebut masuk ke header. Paket menghapus pemisah jalur, null byte, serta carriage return/line feed (CR/LF). Paket meng-escape tanda kutip ganda untuk bentuk yang dikutip. Paket menambahkan parameter Request for Comments (RFC) 5987 filename*=UTF-8''… untuk nama non-ASCII. Nama yang kosong menjadi document.pdf.
Kontrol 4 — Validasi jalur konfigurasi
Bagian berjudul “Kontrol 4 — Validasi jalur konfigurasi”Registry fon menolak nilai fontsPath yang mengandung stream wrapper (://) atau null byte. Registry menghasilkan runtime error. Ini memblokir jalur yang dibungkus seperti php:// atau phar://.
Kontrol 5 — Permukaan service-locator yang minimal
Bagian berjudul “Kontrol 5 — Permukaan service-locator yang minimal”CodeIgniter 4 tidak menyediakan kontainer PHP Standards Recommendation 11 (PSR-11). Framework ini menggunakan locator Services. PSR-11 §1.3 menganggap pola service-locator sebagai pola yang tidak disarankan (modal SHOULD NOT). Paket menjaga permukaan locator tetap kecil: setiap layanan memiliki satu metode factory bernama. Selesaikan layanan di batas controller. Teruskan objek konkret ke lapisan dalam. Jangan meneruskan kelas Services ke dalam kode domain.
Operasi penandatanganan dan TSA (NextPDF Pro / Enterprise)
Bagian berjudul “Operasi penandatanganan dan TSA (NextPDF Pro / Enterprise)”Layanan penandatanganan tetap nonaktif secara default. Layanan ini aktif hanya ketika signature.enabled bernilai true dan signature.certificate tidak kosong. Tingkat tanda tangan default paket adalah B-B. NextPDF Pro menyediakan tanda tangan baseline B-B. Validasi jangka panjang adalah kapabilitas Enterprise terpisah yang didokumentasikan dalam referensi Premium, bukan di sini.
Aturan operasional:
- Jangan menyimpan berkas sertifikat dan kunci di source control. Sediakan berkas tersebut melalui
.envatau secrets manager. - Pastikan
tsa.allow_insecure_httptetap diatur kefalsedi produksi. Saluran Time Stamping Authority (TSA) dalam teks polos tidak dapat diterima. - Atur
tsa.pinned_public_keysketika TSA menerbitkan kunci yang stabil. Pastikantsa.warn_on_key_rotationtetap diatur ketrue. - Batasi akses baca pada berkas kunci hanya untuk pengguna aplikasi.
Daftar periksa operasional
Bagian berjudul “Daftar periksa operasional”- Pastikan semua versi hasil resolusi terkunci di
composer.lock. - Tambahkan
codeigniter4/queuesebagai dependency pada aplikasi yang menjalankan worker. - Jalankan worker antrean sebagai pengguna berhak akses rendah. Berikan akses tulis hanya ke
WRITEPATH/pdfs/. - Pasang ekstensi NextPDF yang sama pada worker seperti pada lapisan web. PDF yang ditandatangani membutuhkan NextPDF Pro atau Enterprise di lingkungan worker.
- Pastikan ekstensi
mbstringdanzlibtersedia di setiap runtime yang membangun PDF. - Pastikan header respons tetap bertahan melewati reverse proxy.
- Catat pembuatan PDF beserta konteksnya. Jangan mencatat material sertifikat atau kata sandi kunci.
Kesesuaian
Bagian berjudul “Kesesuaian”- Penanganan payload antrean selaras dengan OWASP ASVS V1.5.2.
- Penanganan jalur keluaran antrean selaras dengan OWASP ASVS V5.3.2.
- Desain locator mengikuti panduan PSR-11 §1.3.
Konteks komersial
Bagian berjudul “Konteks komersial”NextPDF Core dilisensikan di bawah Apache-2.0. Trust anchor tanda tangan dan pengerasan TSA berlaku ketika NextPDF Pro atau Enterprise terpasang. Paket CodeIgniter mengekspos metode layanan terkait, yang mengembalikan null sampai paket Premium yang sesuai terpasang. Lihat </get-license/?intent=codeigniter-signing>.
Lihat juga
Bagian berjudul “Lihat juga”- /integrations/codeigniter/production-usage/ — registrasi dan dispatch antrean yang tepat.
- /integrations/codeigniter/configuration/ — penandatanganan, TSA, dan kunci jalur.
- /integrations/codeigniter/troubleshooting/ — pesan penolakan yang terverifikasi.
- /integrations/codeigniter/overview/ — seluruh permukaan API.