KeroTools

Pemformat dan Validator XML

Format, validasi, atau minify XML seketika di browser Anda — hasilnya diperbarui langsung.

Masukan
0 karakter
Keluaran

Dokumen Anda tetap di perangkat

Tidak ada yang perlu dihapus kemudian

Aman untuk dokumen teregulasi

Jalan di semua browser modern

Cara kerjanya

  1. 1

    Tempel XML Anda

    Berkas konfigurasi, respons API, sebuah faktur, sebuah umpan, atau ekspor yang perlu Anda baca.

  2. 2

    Rapikan atau minifikasi

    Indentasi supaya terbaca, atau padatkan lagi — peringatannya muncul pada kedua arah.

  3. 3

    Salin hasilnya

    Bawa ke penyunting, sebuah tiket, data uji, atau dokumen yang hendak Anda kirim.

Mengapa memakai alat ini

Diberi tahu bila perapian mengubah data

Mengindentasi elemen yang memuat teks mengubah teks itu, dan Anda diberi tahu sebelumnya alih-alih sesudahnya.

Awalan namespace dipertahankan

Awalan dibiarkan persis seperti ditulis, jadi ekspresi XPath dan lembar XSLT yang merujuknya tetap bekerja.

Entitas eksternal tak pernah diselesaikan

Tak ada berkas dibaca dan tak ada URL diambil — sifat yang paling perlu dimiliki sebuah alat XML.

Bom pemuaian ditolak

Dokumen kecil yang memuai menjadi gigabita terdeteksi dan ditolak alih-alih membekukan tab.

Deklarasi dan pengodean dijaga

Deklarasi XML, atribut pengodeannya, dan tanda urutan bita apa pun keluar dari proses tanpa berubah.

Tak ada yang meninggalkan browser

Faktur, muatan SOAP, dan pernyataan identitas diproses di halaman ini dan tak diunggah ke mana pun.

Mengindentasi XML bukan soal rupa — spasi di dalam elemen adalah data

Inilah fakta yang memisahkan perapian XML dari perapian JSON, dan hampir semua kejutan pada pokok ini bercabang darinya. Di JSON, spasi di antara token sepenuhnya berada di luar model datanya: rapikan ulang sebuah dokumen dan tiap nilai yang dibaca pengurai Anda tetap sama persis. XML tak memberi jaminan semacam itu. Isi sebuah elemen adalah simpul teks, dan spasi merupakan bagian dari simpul itu kecuali ada yang menyatakan sebaliknya secara tegas. Ubah `<nama>Ali</nama>` menjadi bentuk terindentasi dengan teksnya di baris sendiri, maka elemen itu tak lagi berisi `Ali` — ia berisi sebuah pergantian baris, dua spasi, `Ali`, satu pergantian baris lagi, dan spasi lagi. Sebagian besar kode aplikasi menyembunyikan ini dengan memangkas saat membaca, dan justru itulah sebabnya hal ini luput sampai ia jadi penting: sebuah nilai yang dibandingkan dengan basis data, sebuah jumlah periksa, sebuah tanda tangan. Spesifikasi XML memang menyediakan `xml:space="preserve"` untuk menyatakan spasi bermakna, dan sebuah skema bisa menandai elemen sebagai tak peka spasi, tetapi perapi yang hanya melihat dokumennya tak mengetahui keduanya. Ia harus memperingatkan alih-alih mengandaikan, dan itulah yang dilakukan alat ini.

Merapikan ulang dokumen bertanda tangan membatalkan tanda tangannya, dan itu memang dirancang begitu

Akibat di atas menjadi nyata begitu sebuah dokumen ditandatangani. Tanda tangan digital XML tidak menandatangani berkasnya — ia menandatangani bentuk kanonik dari pohon dokumen, yang dihasilkan sebuah langkah penormalan yang didefinisikan dalam spesifikasi Canonical XML. Langkah itu memakukan urutan atribut, deklarasi namespace, dan spasi tertentu, supaya dua dokumen yang bermakna sama menghasilkan ringkasan yang sama. Yang tak dilakukannya adalah memaafkan spasi yang Anda tambahkan di dalam isi sebuah elemen, sebab bagi model itu bukan perapian melainkan perubahan data. Maka faktur bertanda tangan, pernyataan SAML, atau pesan SOAP yang sudah dipercantik tak lagi sah, dan kegagalannya total: verifikasinya tak melaporkan selisih kecil, ia melaporkan bahwa tanda tangannya tak cocok. Kaidah yang perlu dibawa pulang: dokumen bertanda tangan adalah artefak biner yang mengenakan kostum teks. Bacalah ia dalam bentuk rapi kalau Anda mau, tetapi kirimkan bita yang Anda terima.

Awalan namespace bukanlah namanya — URI-nyalah namanya

Namespace adalah tempat rancangan XML paling sering mengejutkan pendatang dari JSON, dan tempat perapi yang sembrono menimbulkan kerusakan sungguhan. Awalan seperti `soap:` atau `ns2:` adalah singkatan lokal yang tak bermakna dengan sendirinya; yang mengidentifikasi sebuah elemen adalah URI tempat awalan itu diikat. Dua dokumen yang memakai `a:Body` dan `env:Body` itu identik bila kedua awalannya terikat ke URI namespace yang sama, dan dua dokumen yang sama-sama memakai `ns:Item` sama sekali tak berkerabat bila URI-nya berbeda. Itulah sebabnya alat yang dengan niat baik mengganti nama awalan menjadi sesuatu yang lebih rapi menghasilkan dokumen yang setara secara teknis dan rusak secara praktis: tiap ekspresi XPath, tiap templat XSLT, dan tiap pemilih yang ditulis tangan di basis kode Anda merujuk pada awalannya, bukan pada URI-nya, karena itulah yang orang tulis. Namespace bawaan menambahkan jebakan kedua, sebab elemen tanpa awalan di dalam `xmlns="…"` berada di namespace itu sementara atribut tanpa awalan tak berada di namespace mana pun. Alat ini tak mengubah satu awalan pun dan tak memindahkan satu deklarasi pun.

Pemuaian entitas adalah alasan pengurai XML harus diberi tahu apa yang tak boleh dilakukannya

XML membolehkan sebuah dokumen mendefinisikan entitasnya sendiri, dan membolehkan satu entitas merujuk entitas lain. Fitur tunggal itu menghasilkan penolakan layanan paling termasyhur dalam sejarah format ini: definisikan sebuah entitas sebagai sepuluh salinan entitas lain, sarangkan sepuluh tingkat, dan dokumen beberapa ratus bita memuai menjadi satu miliar karakter. Ia punya nama — serangan sejuta tawa — dan bekerja pada pengurai mana pun yang memuaikan entitas tanpa anggaran. Persoalan yang lebih tajam adalah entitas eksternal, yang membolehkan dokumen menyatakan bahwa nilai sebuah entitas harus dibaca dari suatu tempat: `SYSTEM "file:///etc/passwd"` membaca berkas lokal, dan sebuah URL `http://` mengubah pengurai menjadi klien permintaan yang dengan senang hati menjangkau ke dalam jaringan privat atas nama penyerang. Itulah XXE, dan bertahun-tahun ia dipakai membaca kredensial dari server produksi. Pertahanannya bukan penguraian yang cerdik, melainkan penolakan: pemroses dokumen yang tak pernah menyelesaikan entitas eksternal tak bisa dibujuk mengambil apa pun. Alat ini tak menyelesaikan satu pun, dan membatasi pemuaian, sehingga dokumen bermusuhan di sini sekadar ditolak.

XML datang lewat dua pintu: layanan pemerintah dan sumber daya Android

Ada baiknya menyebut dari mana XML biasanya masuk ke pekerjaan pengembang di sini, karena kedua pintunya menuntut kehati-hatian yang berbeda. Pintu pertama adalah antarmuka berbasis SOAP: banyak layanan pemerintahan, perbankan, dan asuransi di kawasan ini masih bertukar data lewat SOAP, dan sebuah respons SOAP tiba sebagai satu baris panjang tanpa jeda yang mustahil dibaca tanpa dirapikan — sementara isinya berupa NIK, NPWP, nomor rekening, atau data nasabah. Pintu kedua adalah pengembangan Android, tempat XML bukan format pertukaran melainkan sumber daya: tata letak, string, dan berkas manifes. Di sana ada jebakan tersendiri yang tak dimiliki XML biasa — berkas `strings.xml` memperlakukan tanda petik tunggal sebagai karakter istimewa, jadi sebuah apostrof di dalam teks harus didahului garis miring terbalik atau seluruh sumber dayanya gagal dikompilasi, dan sebuah `&` dalam nama merek harus menjadi `&amp;` sama seperti di mana pun. Alat ini merapikan keduanya tanpa menyentuh isi teks: ia tak mengubah pelolosan, tak menambah, dan tak mengurangi.

Apa yang sebenarnya ada di dalam XML yang perlu dirapikan orang

Menyebut nama dokumennya sepadan, karena daftarnya menjelaskan kehati-hatiannya. XML adalah tempat bagian dunia perangkat lunak yang teregulasi bermukim: faktur elektronik yang disampaikan ke otoritas pajak, muatan SOAP yang berpindah antarbank, pernyataan SAML yang secara harfiah adalah identitas seseorang dalam perjalanan, rekam medis, berkas perkara, ekspor penggajian, umpan produk berisi harga yang belum diumumkan. Ketika seseorang meraih sebuah perapi, hampir selalu itu karena salah satu dokumen tersebut gagal dan ia perlu membacanya — artinya contoh di papan klipnya adalah contoh sungguhan, lengkap dengan nomor pajak pelanggan dan subjek pernyataannya. Menempelkannya ke perapi terhosting mengunggah persis hal itu, dan sebuah pernyataan SAML khususnya merupakan kredensial pembawa selama ia masih berlaku. Halaman ini mengurai dan mencetak dokumennya di dalam JavaScript dan tak membuat satu permintaan pun sambil melakukannya; panel jaringan pada developer tools Anda akan menunjukkan hal yang sama.

Kesalahan umum yang sebaiknya dihindari

  • Mengandaikan perapian XML seaman perapian JSON. Spasi di dalam elemen adalah bagian simpul teksnya, jadi mengindentasi mengubah nilai yang dibaca kembali oleh pengurai.
  • Mempercantik dokumen bertanda tangan. Tanda tangan meliputi bentuk kanonik pohonnya, dan spasi yang ditambahkan ke isi elemen adalah perubahan data — verifikasinya gagal sama sekali.
  • Membiarkan sebuah alat mengganti nama awalan namespace. URI-nya adalah identitas, tetapi tiap XPath dan XSLT di basis kode Anda merujuk pada awalannya.
  • Lupa bahwa `strings.xml` di Android memperlakukan tanda petik tunggal secara istimewa. Sebuah apostrof harus didahului garis miring terbalik atau seluruh sumber dayanya gagal dikompilasi.
  • Mengurai XML tak tepercaya dengan entitas eksternal aktif. `SYSTEM "file:///…"` membaca berkas lokal dan sebuah URL http membuat pengurai mengambil atas nama penyerang — inilah XXE.

Perbandingan

AspekAlat iniPerapi daringSebuah pengaya penyunting
Dokumen dikirim ke serverTidak pernahUmumnya yaTidak
Memperingatkan bila indentasi mengubah dataYaTidakJarang
Menyelesaikan entitas eksternalTidak pernahKadangBisa dikonfigurasi
Mempertahankan awalan namespaceSelaluUmumnyaUmumnya
Menjaga deklarasi dan tanda urutan bitaYaBeragamUmumnya
HargaGratisGratis / paket berbayarGratis

Fitur

Perapian dan minifikasi

Dua arah, dengan lebar indentasi di tangan Anda dan tab tersedia bila sebuah proyek menuntutnya.

Pemeriksaan keterbentukan

Tag tak seimbang, ampersand liar, dan nama tak sah dilaporkan berikut baris dan kolomnya.

Peringatan keamanan spasi

Elemen berisi konten campuran atau teks bermakna ditandai sebelum indentasi menulis ulang isinya.

Urutan atribut tak disentuh

Atribut tetap dalam urutan dokumen, karena sebagian konsumen dan sebagian tanda tangan bergantung padanya.

CDATA dan komentar dipertahankan

Bagiannya dijaga harfiah, termasuk isi yang selain itu akan perlu diloloskan.

Dokumen besar didukung

Ekspor berukuran beberapa megabita dirapikan tanpa unggahan maupun plafon ukuran.

Tanpa instalasi

Tanpa alat build, tanpa runtime, tanpa dependensi — jalan di halaman web.

Ramah Arab dan RTL

Antarmuka lengkap dalam delapan bahasa, termasuk Arab kanan-ke-kiri.

Aman secara bawaan

Disajikan lewat HTTPS, tanpa pelacakan konten dan tanpa unggahan ke pihak ketiga.

Siapa yang memakainya

Pengembang integrasi

Membaca respons SOAP yang tiba sebagai satu baris tanpa jeda.

Tim keuangan dan penagihan

Memeriksa faktur elektronik yang ditolak otoritas pajak.

Administrator sistem

Merapikan berkas konfigurasi sebelum menyetorkannya ke kendali versi.

Siapa pun yang melacak galat API

Menemukan satu-satunya ampersand tak diloloskan yang membuat dokumen gagal diurai.

Pertanyaan yang Sering Diajukan

Tidak. Semuanya berjalan lokal di browser Anda — teks Anda tidak pernah diunggah, disimpan, atau dibagikan.

Ya — sepenuhnya gratis, tanpa akun dan tanpa batas.