Model ancaman mesin
Sekilas pandang
Bagian berjudul “Sekilas pandang”Halaman ini mendefinisikan model ancaman untuk mesin inti NextPDF. Halaman ini mencantumkan kelas serangan yang dianggap berada dalam ruang lingkup mesin saat memproses masukan yang dipengaruhi penyerang: Hypertext Markup Language (HTML), Cascading Style Sheets (CSS), Scalable Vector Graphics (SVG), fon, gambar, dan berkas Portable Document Format (PDF) yang sudah ada. Halaman ini menyatakan postur baku untuk setiap kemampuan sumber daya eksternal dan menunjuk ke penjaga dalam kode yang memitigasi tiap kelas.
Batasan. Model ancaman mencatat ancaman yang dipertimbangkan beserta mitigasi yang diterapkan untuknya. Model ini tidak mengklaim bahwa kerentanan tidak ada. Kelas yang tidak tercantum di sini belum tentu tidak ada; kelas tersebut bisa saja berada di luar ruang lingkup model saat ini. Sebelum fitur yang belum diimplementasikan dirilis, fitur tersebut harus melewati tinjauan ancaman formal. Perlakukan halaman ini sebagai catatan rancangan yang disengaja, bukan sebagai bukti keamanan.
Pemasangan
Bagian berjudul “Pemasangan”composer require nextpdf/core:^3Penjaga yang dijelaskan di sini merupakan bagian dari paket core. Anda tidak memerlukan dependensi tambahan untuk mengaktifkannya. Penjaga tersebut aktif secara baku.
Tinjauan konseptual
Bagian berjudul “Tinjauan konseptual”Model ini mengikuti proses pemodelan ancaman Open Worldwide Application Security Project (OWASP) (owasp_threat_modeling#x1.x11.p6): uraikan sistem menjadi titik-titik tempat masukan tidak tepercaya melintasi batas kepercayaan, enumerasikan ancaman pada setiap batas, dan catat mitigasinya.
Batas kepercayaan utama mesin adalah penyerapan dokumen: setiap tempat yang isinya ditulis di luar sistem — stylesheet jarak jauh, sumber @font-face, sebuah <image href>, faktur Extensible Markup Language (XML) yang disematkan, atau PDF yang akan diperiksa — dapat membuat mesin mengambil, mengurai, atau mendekompresi data. Prinsip yang berlaku adalah tolak-secara-baku: setiap kemampuan sumber daya eksternal nonaktif sampai Anda mengaktifkannya secara eksplisit melalui objek kebijakan. Hal ini menerapkan dasar fungsionalitas-minimum dari National Institute of Standards and Technology (NIST) SP 800-53 Rev. 5 CM-7 (nist_sp_800_53r5#x4.x182.p14) pada mesin rendering: nilai baku konstruktor adalah posisi yang paling ketat. Membuka suatu kemampuan adalah keputusan eksplisit Anda.
Permukaan API
Bagian berjudul “Permukaan API”Model ancaman bukan application programming interface (API). Objek kebijakan yang mengekspresikannya didokumentasikan pada halaman modul. Titik masuk yang relevan dengan kepercayaan adalah kontrak kebijakan sumber daya eksternal (ExternalResourcePolicyInterface, dengan DefaultExternalResourcePolicy sebagai nilai baku tolak-semua) serta penjaga Uniform Resource Locator (URL) dan XML (UrlValidator, XmlGuard). Halaman ini merujuk perilakunya; halaman ini tidak mendokumentasikan ulang signature metodenya.
Contoh kode — Mulai cepat
Bagian berjudul “Contoh kode — Mulai cepat”Postur aman sudah menjadi nilai baku. Anda tidak memerlukan kode untuk mendapatkannya:
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Html\DefaultExternalResourcePolicy;
// Out of the box: @font-face blocked, @import blocked, background-image// blocked, SVG external refs blocked. A document that tries to fetch a// remote resource gets a system-font fallback or an ignored rule — not an// outbound request.$policy = new DefaultExternalResourcePolicy();Contoh kode — Produksi
Bagian berjudul “Contoh kode — Produksi”Membuka suatu kemampuan dilakukan secara sengaja dan terbatas. Jika Anda harus mengizinkan webfont yang dihosting di content delivery network (CDN) melalui Hypertext Transfer Protocol Secure (HTTPS) dalam produksi, aktifkan secara eksplisit dan batasi cakupannya:
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Html\DefaultExternalResourcePolicy;
// Explicit, scoped opt-in. The HTTPS scheme is required; size and glyph// caps still apply; the URL still passes the SSRF guard before any fetch.$policy = (new DefaultExternalResourcePolicy()) ->withFontFaceAllowed(['https']);Kasus tepi & jebakan
Bagian berjudul “Kasus tepi & jebakan”- Belum diimplementasikan bukan berarti aman-secara-kebetulan. Kemampuan seperti CSS
background-image url()tidak diimplementasikan, sehingga saat ini tidak memiliki permukaan serangan. Kemampuan tersebut tetap didokumentasikan sebagai kemampuan yang memerlukan gerbang ancaman formal sebelum implementasi apa pun di masa depan. Ketiadaan kode adalah mitigasi saat ini, bukan jaminan permanen. - Rebinding Domain Name System (DNS) adalah sasaran yang terus bergerak.
UrlValidatormelakukan resolusi nama host dan mengembalikan alamat Internet Protocol (IP) hasil resolusi agar pemanggil dapat menyematkan koneksi (CURLOPT_RESOLVE), sehingga menutup jendela time-of-check to time-of-use (TOCTOU) antara validasi dan pengambilan. Ini adalah pertahanan upaya-terbaik, bukan pertahanan absolut. Operator yang berada di balik proksi egress yang permisif tetap dapat menjangkau host internal yang tidak terlihat oleh pustaka. - Bit izin bukanlah kontrol akses. Dokumen yang “memblokir penyalinan” bergantung pada kerja sama pembaca, bukan penegakan. Hal ini dibahas dalam model keamanan. Hal ini ditegaskan di sini karena merupakan kesalahpahaman model ancaman yang umum.
Kinerja
Bagian berjudul “Kinerja”Penjaga gagal dengan cepat dan membatasi pekerjaan: penjaga XML menolak deklarasi tipe dokumen (DOCTYPE) sebelum penguraian serta membatasi ukuran masukan; jalur gambar memberlakukan batas atas megapiksel dan bita sebelum dekompresi; penjaga URL menolak berdasarkan skema dan host sebelum soket apa pun dibuka. Dengan nilai baku yang aman, biayanya berupa permintaan yang ditolak, bukan permintaan yang lambat.
Catatan keamanan
Bagian berjudul “Catatan keamanan”Kelas serangan yang dipertimbangkan beserta mitigasi dalam kode, dengan referensi Common Weakness Enumeration (CWE) dan OWASP jika berlaku:
| Kelas ancaman (CWE / OWASP) | Vektor dalam mesin PDF | Penjaga di dalam kode |
|---|---|---|
Server-side request forgery (SSRF) (OWASP Top 10 2025; owasp_top10_2025#x3.x1.p26) | @font-face/@import/url() yang menunjuk ke 169.254.169.254 atau host internal; pengambil time-stamp authority (TSA), Online Certificate Status Protocol (OCSP), dan certificate revocation list (CRL) | UrlValidator::validateExternalUrl() memblokir rentang privat, dicadangkan, loopback, dan link-local serta endpoint metadata cloud; menolak skema berbahaya; melakukan resolusi DNS; dan mengembalikan IP untuk penyematan koneksi |
XML external entity (XXE) (cwe_top25_2025#x28.x2.p42) | Entitas eksternal atau DOCTYPE dalam faktur XML yang disematkan atau paket Extensible Metadata Platform (XMP) | XmlGuard::loadXml() memberlakukan LIBXML_NONET, menolak deklarasi DOCTYPE apa pun secara langsung, menolak karakter kontrol terlarang XML 1.0, dan menerapkan batas atas ukuran masukan |
| Bom dekompresi | Gambar 1×1 yang menyamarkan muatan 100 MP; Web Open Font Format 2 (WOFF2) yang terlalu besar | Jalur gambar memberlakukan batas atas megapiksel dan batas atas bita sebelum dekompresi; jalur fon membatasi ukuran berkas dan jumlah glif |
| Path traversal | file:///etc/passwd melalui src fon atau SVG | Sumber daya eksternal tolak-semua secara baku; path berkas lokal diselesaikan melalui realpath() terhadap daftar-izin direktori ketika diaktifkan secara eksplisit |
| Injeksi konten | String yang dibuat khusus untuk keluar dari operator PDF; href data:/javascript: | Pelolosan string PDF saat emisi; daftar-izin skema dan sanitasi href pada anotasi |
Secara keseluruhan, nilai baku tersebut membentuk postur sumber daya eksternal tolak-semua: fon, @import, background-image, dan rujukan eksternal SVG tetap nonaktif sampai Anda ikut serta per skema, sebagaimana dijelaskan dalam matriks cakupan properti keamanan yang dipelihara bersama kode.
Halaman ini mendokumentasikan ancaman yang dipertimbangkan. Halaman ini bukan laporan uji penetrasi dan tidak mengklaim bahwa mitigasi yang tercantum sudah lengkap atau bahwa tidak ada kelas kelemahan lain yang berlaku.
Konformansi
Bagian berjudul “Konformansi”Ini bukan profil konformansi. Model ancaman ini disusun berdasarkan proses pemodelan ancaman OWASP dan taksonomi kelemahan CWE Top 25 (cwe_top25_2025#x28.x2.p42); model ini tidak mengklaim konformansi terhadap skema sertifikasi keamanan apa pun. Penilaian independen merupakan ranah audit, bukan cakupan dokumen ini.