Lewati ke konten

Model ancaman mesin

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.

Terminal window
composer require nextpdf/core:^3

Penjaga yang dijelaskan di sini merupakan bagian dari paket core. Anda tidak memerlukan dependensi tambahan untuk mengaktifkannya. Penjaga tersebut aktif secara baku.

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.

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.

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();

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']);
  • 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. UrlValidator melakukan 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.

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.

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 PDFPenjaga 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 dekompresiGambar 1×1 yang menyamarkan muatan 100 MP; Web Open Font Format 2 (WOFF2) yang terlalu besarJalur gambar memberlakukan batas atas megapiksel dan batas atas bita sebelum dekompresi; jalur fon membatasi ukuran berkas dan jumlah glif
Path traversalfile:///etc/passwd melalui src fon atau SVGSumber daya eksternal tolak-semua secara baku; path berkas lokal diselesaikan melalui realpath() terhadap daftar-izin direktori ketika diaktifkan secara eksplisit
Injeksi kontenString 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.

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.