Bahasa Indonesia

Apa yang tidak dapat dilakukan oleh Perangkat Data untuk Pengembang

Setiap utilitas di sini memiliki keunggulan. Halaman ini menyatakan di mana masing-masing berhenti, mengapa, dan apa yang harus digunakan — sehingga Anda mengetahuinya sebelum Anda bergantung padanya, bukan setelahnya.

Batasan yang berlaku untuk segala hal

Semua pemrosesan terjadi dalam satu tab browser, menggunakan memori perangkat Anda. Hal itulah yang membuat klaim privasi menjadi benar, dan juga merupakan sumber dari setiap batasan ukuran di bawah ini. Setiap utilitas membatasi masukannya secara eksplisit dan menolak pekerjaan berukuran besar dengan pesan yang jelas daripada membekukan halaman.

Dua fitur memerlukan konteks yang aman — https:// atau localhost — karena di situlah satu-satunya tempat browser mengekspos Web Crypto API: hashing SHA dan pembuatan UUID. Dibuka di HTTP biasa pada alamat LAN, keduanya akan memberi tahu Anda bahwa keduanya tidak tersedia. Tidak ada yang bisa menggantikan implementasi tulisan tangan, karena browser sendirilah yang patut dipercaya.

Tidak ada pekerja layanan, jadi pemuatan pertama memerlukan koneksi jaringan. Setelah itu, perangkat tidak memerlukan apa pun.

JSON

Hanya RFC 8259 yang ketat. Komentar, koma di akhir, string yang diberi tanda kutip tunggal, kunci yang tidak diberi tanda kutip, dan NaN atau Infinity semuanya ditolak — ini adalah fitur literal objek JSON5 atau JavaScript, bukan JSON. Validator menyebutkan nama mana yang ditemukan, sehingga penolakan setidaknya dapat ditindaklanjuti.

Angka diurai menjadi IEEE-754 ganda, itulah yang dilakukan JSON.parse. Bilangan bulat di luar 2^53 kehilangan presisi saat bolak-balik. Jika Anda menangani pengidentifikasi berukuran besar, pengidentifikasi tersebut harus berupa string di JSON itu sendiri — tidak ada cara bagi alat JavaScript untuk memulihkan nilai yang tidak dapat diwakili oleh format.

Urutan kunci dipertahankan seperti yang tertulis, dan pengurutan opsional hanya berlaku untuk kunci objek. Urutan array tidak pernah berubah, karena menyusun ulang array akan mengubah data, bukan presentasinya.

Dokumen yang berisi sekitar 8 juta karakter ditolak.

Konverter sintaksis

Sembilan konversi terarah — JSON hingga YAML, YAML hingga JSON, JSON hingga XML, XML hingga JSON, JSON hingga TOML, TOML hingga JSON, YAML hingga TOML, TOML hingga YAML, JSON hingga CSV. Apa pun yang tidak ada dalam daftar itu ditolak dengan kalimat yang menyebutkan rute yang memang ada. Jaringan lengkap konvensi ada di halaman konverter; bagian ini menyatakan di mana konversi berhenti.

CSV ditulis dan tidak pernah dibaca. Membacanya berarti menebak pembatas, dialek kutipan, baris header, dan tipe untuk setiap sel — empat tebakan, konverter salah menebak.

Komentar hilang ke segala arah, dalam setiap format yang memilikinya.

YAML dimuat dengan skema terbatas yang hanya dapat menghasilkan data berbentuk JSON. Tag khusus dan bahasa tertentu — !!js/function, !!python/object/apply, !!binary, !!timestamp, !!set, !!omap — ditolak. Itu disengaja: pemuat yang membuat itu adalah konstruktor objek arbitrer.

Di bawah skema JSON default, "~" dan nilai kosong adalah string, bukan null, dan "yes" adalah string "yes". Opsi Skema inti menyelesaikan masalah tersebut sesuai harapan kebanyakan orang. Keduanya aman; keduanya berbeda dalam penafsiran skalar, dan alat tersebut menjelaskan mana yang menjadi titik pilihan. Tidak ada yang membaca TIDAK sebagai salah — itu adalah perilaku YAML 1.1 dan ini adalah YAML 1.2.

Aliran multi-dokumen YAML menjadi larik dokumen, karena tidak ada format lain di sini yang memiliki aliran. Jangkar dan alias diselesaikan alih-alih dipertahankan, alias rekursif ditolak, dan dokumen yang melampaui satu juta nilai setelah aliasnya diikuti ditolak — pola YAML "miliar tertawa". Kunci pemetaan yang berulang mempertahankan nilai terakhir, dan alat tersebut menyatakan demikian.

YAML infinity dan NaN tidak memiliki representasi dalam format target apa pun. Daripada membiarkan JSON.stringify diam-diam menulis nol, alat ini akan mengonversi dan memperingatkan Anda bahwa hal itu terjadi.

Dokumen XML yang berisi DOCTYPE ditolak mentah-mentah, termasuk dokumen yang tidak berbahaya, sehingga tidak ada entitas eksternal yang dapat diselesaikan dan tidak ada rantai entitas yang dapat diperluas. Tidak ada pilihan untuk mengizinkannya. XML konten campuran kehilangan posisi teks relatif terhadap elemen turunan, satu elemen berulang tidak dapat dibedakan dari elemen tidak berulang, dan setiap nilai berupa string kecuali inferensi tipe diaktifkan.

TOML memiliki empat tipe temporal yang tidak dimiliki JSON, YAML dan XML. Masing-masing menjadi string RFC 3339 seperti yang tertulis, jadi perjalanan bolak-balik TOML mengubah nilai-nilai tersebut menjadi string; tidak ada jalan tanpa kerugian. TOML tidak memiliki null, jadi kunci null dihilangkan dari keluaran TOML. Akar dokumen TOML harus berupa tabel, jadi array atau skalar JSON tidak bisa menjadi TOML sama sekali. Bilangan bulat yang melewati 2^53 menjadi string, bukan dibulatkan secara diam-diam.

CSV tidak dapat membedakan string kosong dari null. Nilai yang disarangkan diratakan menjadi nama kolom bertitik, sehingga kunci yang sudah berisi titik akan menghasilkan nama ambigu yang diperingatkan, bukan di-escape. Sel teks yang dimulai dengan =, +, -, @, tab, atau tanda kutip diawali dengan tanda kutip, karena spreadsheet menjalankannya sebagai rumus.

Masukan dibatasi per format: 8 juta karakter untuk JSON, 4 juta untuk XML, 2 juta untuk YAML dan TOML. Keluaran CSV dibatasi pada 100,000 baris dan 2,000 kolom.

Basis64

Hanya teks. Tidak ada unggahan file di sini: untuk menyandikan file, Anda perlu membacanya, dan toolkit ini dibuat dalam kotak teks. Gunakan alat berorientasi file untuk itu.

Decoding menghasilkan teks ketika byte UTF-8 valid, dan melaporkan kesalahan bersih ketika byte tidak valid — yang mana tampilan byte akan menampilkan hex sebagai gantinya. Muatan biner sewenang-wenang bukanlah teks, dan berpura-pura sebaliknya akan merusaknya.

Masukan lebih dari 4 juta karakter ditolak.

URL pengkodean

Tiga aturan yang ditawarkan — komponen, keseluruhan-URL, dan bentuk — adalah tiga aturan yang didefinisikan oleh platform. Varian khusus aplikasi (AWS kanonikalisasi SigV4, pengkodean OAuth 1.0a persen) sedikit berbeda dan tidak disediakan.

Inspektur URL membutuhkan URL mutlak dengan skema. Jalur relatif tidak dapat diuraikan menjadi host, jalur, dan kueri karena tidak memilikinya.

Nama domain yang diinternasionalkan ditampilkan saat browser menormalkannya, yang mungkin berupa kode kecil, bukan skrip asli.

HTML entitas

Tabel entitas bernama mencakup subset praktis — karakter penting markup, tipografi, mata uang, panah, matematika, Yunani dan Latin-1 — tidak semua 2,231 HTML5 referensi bernama. Nama-nama di luarnya dicantumkan untuk Anda dan dibiarkan persis seperti yang tertulis, karena menciptakan karakter akan lebih buruk daripada membiarkan teksnya saja.

Diperlukan tanda titik koma untuk mengakhiri. HTML5 mentolerir beberapa referensi lama tanpa referensi tersebut, namun menyelesaikannya dengan benar bergantung pada markup di sekitarnya, yang tidak dimiliki oleh alat teks mandiri.

Penguraian kode adalah sekali jalan, jadi "&amp;lt;" menerjemahkan ke teks "&lt;" dan bukan ke "<". Itu benar: pengkodean ganda mungkin disengaja.

Ini lolos dari teks untuk HTML. Ini bukan pembersih HTML — tidak akan membuat dokumen penuh tanda dan menghilangkan bagian-bagian yang berbahaya. Itu adalah pekerjaan yang berbeda dan jauh lebih sulit.

Stempel waktu

Deteksi unit bersifat heuristik: 10^11 dan di atasnya dibaca sebagai milidetik. Itu selalu ditampilkan dan selalu dapat ditimpa, tetapi ini merupakan tebakan atas masukan yang ambigu.

Stempel waktu mikrodetik dan nanodetik, yang dikeluarkan beberapa database, tidak terdeteksi. Bagi dengan 1,000 atau 1,000,000 terlebih dahulu.

Konversi menggunakan waktu POSIX, yang tidak memiliki detik kabisat — 23:59:60 tidak ada di sini, sama seperti tidak ada di stempel waktu Unix mana pun.

Render waktu lokal menggunakan zona yang dikonfigurasi browser Anda. Anda tidak dapat memilih zona IANA sembarangan untuk dirender.

Nilai yang melebihi ±273,790 tahun dari zaman melebihi apa yang dapat diwakili oleh tanggal JavaScript dan ditolak.

UUID

Hanya versi 4 (acak) yang dihasilkan. Versi 1 dan 6 memerlukan alamat MAC dan urutan jam yang stabil; versi 7 memerlukan penghitung monoton agar bernilai apa pun; versi 3 dan 5 berbasis nama dan memerlukan namespace serta hash yang tidak diekspos oleh browser untuk tujuan ini.

Validator mengenali bentuk teks kanonik serta melaporkan versi dan variannya. Ia tidak dapat memberi tahu Anda apakah UUID dihasilkan dengan baik — versi-4 UUID yang dihasilkan dari generator yang lemah terlihat identik dengan generator yang bagus.

Batch dibatasi pada nilai 500.

Tanpa Web Crypto, tidak ada yang dihasilkan. Kembali ke Math.random() akan menghasilkan pengidentifikasi yang dapat diprediksi, sehingga alat tersebut malah menolak.

SHA hash

Hanya SHA-1, SHA-256, SHA-384 dan SHA-512, karena itulah yang diimplementasikan oleh SubtleCrypto. MD5 tidak hadir karena kebutuhan dan pilihan.

SHA-1 hadir untuk interoperabilitas lama dan diberi label rusak secara kriptografis di mana pun ia muncul. Jangan menggunakannya untuk apa pun yang penting keamanannya.

Hanya teks — tidak ada hashing file, karena alasan yang sama base64 tidak memiliki input file.

Tidak ada HMAC, tidak ada derivasi kunci, tidak ada hashing kata sandi. Kata sandi memerlukan fungsi yang lambat, asin, dan sulit diingat seperti Argon2id, scrypt, atau bcrypt; hash serba guna yang cepat adalah alat yang salah dan menggunakannya adalah kesalahan serius, bukan kesalahan kecil.

Perbedaan teks

Perbandingan tingkat garis saja. Tidak ada penyorotan tingkat kata atau tingkat karakter dalam baris yang diubah.

Baris yang dimodifikasi muncul sebagai penghapusan ditambah tambahan, yang merupakan cara skrip edit berbasis baris mewakilinya.

Garis depan dan belakang yang identik dipangkas sebelum perbandingan, sehingga file besar yang berbeda di satu tempat akan cepat dilakukan. Yang tersisa dibatasi pada 2,000 baris yang berbeda per sisi, di luar itu alat akan menolak daripada mencoba alokasi yang akan mematikan tab.

Tidak ada penggabungan tiga arah, tidak ada aplikasi patch dan tidak ada kesadaran sintaksis.

JWT penguraian kode

Hanya penguraian kode. Tanda tangan tidak pernah diverifikasi, dan hal ini tidak akan berubah — alasannya dijelaskan dalam panduan token.

Token terenkripsi (JWE, lima segmen) tidak dapat didekodekan tanpa kunci. Alat ini mengidentifikasi mereka dan berhenti.

Token yang disarangkan tidak dibuka secara otomatis; memecahkan kode token bagian dalam secara terpisah.

Klaim di luar kumpulan terdaftar RFC 7519 ditampilkan tanpa interpretasi, karena maknanya khusus untuk aplikasi.

Token yang melebihi 200,000 karakter ditolak.

HTML WYSIWYG editor

Sanitiser adalah daftar yang diizinkan untuk keluaran editor ini, dibuat berdasarkan tokeniser string, bukan parser HTML5 lengkap. Ini bukan filter XSS untuk tujuan umum, dan menggunakannya sebagai filter adalah suatu kesalahan: browser dapat mengurai payload yang sengaja diubah formatnya ke dalam pohon yang berbeda dari yang dilakukan tokeniser ini. HTML yang tidak tepercaya termasuk dalam pembersih sisi server yang dijalankan melawan parser asli.

Hanya elemen terdaftar yang bertahan: paragraf, judul, penekanan, daftar, tautan, kutipan, kode, dan beberapa tag sebaris. Segala sesuatu yang lain tidak terbungkus, jadi teksnya tetap ada dan tagnya tidak. Gambar, tabel, warna, font, dan gaya sebaris semuanya tidak ada, dan tidak ada cara untuk menambahkannya.

skrip, gaya, iframe, objek, sematkan, formulir, svg, matematika, dan elemen teks mentah atau konten asing lainnya dihapus bersama dengan semua yang ada di dalamnya.

Tautan dapat menggunakan http, https, mailto, telp, ftp atau alamat relatif. Apa pun lainnya — termasuk javascript:, data: dan blob: — ditolak, begitu pula alamat yang berisi referensi karakter di luar tabel entitas alat ini.

Permukaan pengeditan menggunakan document.execCommand. Ini sudah tidak digunakan lagi, penggantinya tidak diterapkan di browser mana pun, dan perilakunya berbeda-beda antar mesin, khususnya untuk daftar bersarang. Mode sumber adalah jalan keluar ketika sebuah perintah melakukan hal yang salah.

Dokumen yang melebihi 500,000 karakter ditolak.

Kalkulator Chmod

Hanya dua belas bit izin: membaca, menulis, dan mengeksekusi untuk pemilik, grup, dan lainnya, ditambah setuid, setgid, dan lengket. Daftar kontrol akses, atribut yang diperluas, konteks SELinux, kemampuan, dan ACL Windows semuanya berada di luar apa yang dapat diungkapkan oleh mode.

Perintah yang dibuatnya adalah teks untuk Anda salin. Tidak ada yang dieksekusi, dan tidak ada file di mesin Anda yang dibaca atau diubah — bidang jalur hanya ada untuk mengisi perintah.

Itu tidak menghitung aritmatika umask, dan tidak mengetahui mode apa yang dimiliki file tertentu saat ini, karena halaman web tidak dapat melihat sistem file Anda.

Docker dijalankan untuk menulis

Satu perintah docker run menjadi satu layanan. Penyiapan multi-kontainer harus dirakit dengan mengonversi setiap perintah dan menggabungkan sendiri hasilnya.

--mount, --gpus, --device, --link, --volumes-from, --network-alias dan selusin flag lainnya tidak memiliki padanan yang dapat ditulis oleh konverter ini. Masing-masing menghasilkan peringatan yang memberi nama bendera, bukannya menghilang.

Bendera yang tidak dikenali oleh konverter dianggap tidak mempunyai nilai, dan dinyatakan demikian dalam peringatan. Jika memang diperlukan, nilai tersebut salah dibaca — hapus tandanya dan tambahkan efeknya dengan tangan.

Tidak ada yang dieksekusi, dievaluasi, atau diteruskan ke shell: perintah dibagi oleh tokeniser yang memahami kutipan dan tidak ada yang lain. Oleh karena itu, konverter tidak dapat memperluas $VARIABLES, menyelesaikan $(subkulit) atau membaca --env-file, karena ketiganya berarti menjalankan sesuatu atau membuka file.

Output diperiksa untuk mengetahui kutipan YAML yang benar tetapi tidak divalidasi berdasarkan Spesifikasi Compose, dan tidak ada gambar yang dihubungi untuk mengonfirmasi keberadaannya.

Perintah lebih dari 100,000 karakter ditolak.

Generator crontab

Sintaks crontab lima bidang saja. Ekspresi Quartz dan systemd enam bidang ditolak dengan penjelasan, begitu pula operator non-standar L, W, # dan ?, dan @reboot, yang tidak memiliki jadwal untuk dipratinjau.

Bidang hari dalam bulan dan hari dalam seminggu digabungkan dengan OR ketika keduanya dibatasi, cocok dengan Vixie cron. Alat ini memperingatkan setiap kali hal tersebut terjadi, karena ini adalah kesalahan membaca baris cron yang paling umum.

Waktu pengoperasian berikutnya berasal dari data zona waktu Intl browser. Itu hanyalah pratinjau, bukan janji: mesin yang menjalankan cron mungkin menggunakan zona berbeda, versi tzdata berbeda, atau mungkin tidak berjalan pada saat itu.

Pratinjau menelusuri lima tahun ke depan. Jadwal yang lebih jarang dari itu — 29 Februari, misalnya — akan menampilkan kurang dari lima penayangan.

Apa yang terjadi pada apa yang Anda tempel

  • Setiap konversi, hash, decode dan diff berjalan di tab browser Anda. Tidak ada masukan yang diunggah, dicatat atau disimpan di server, karena tidak ada server yang terlibat setelah halaman dimuat.
  • Hash berasal dari implementasi Web Crypto milik browser, dan UUID dari generator acak yang aman secara kriptografis. Tidak ada yang melibatkan panggilan jaringan.
  • Tidak ada yang Anda ketikkan yang ditulis ke penyimpanan lokal atau cookie. Memuat ulang halaman akan membuangnya; menutup tab akan membuangnya.
  • Analisis seluruh situs hanya berjalan pada host produksi kanonik yang dikonfigurasi dan diungkapkan dalam Kebijakan Privasi; host lokal dan pratinjau menolaknya. Nilai, token, URL, dan konten file yang ditempelkan dikecualikan dari peristiwa analisis ToolAcre sendiri. Periklanan dinonaktifkan dalam konfigurasi saat ini.
  • Artinya: kunci JWT atau API adalah kredensial aktif. Kebiasaan yang aman adalah jangan pernah menempelkannya ke halaman web yang tidak Anda tulis, betapapun dapat dipercayanya klaim tersebut — termasuk yang ini.

Pertanyaan

Apakah Anda akan menambahkan unggahan file untuk hashing atau base64?

Mungkin saja, tapi ini adalah jenis alat yang berbeda — pembacaan file, pelaporan kemajuan, pelindung memori untuk file besar — ​​​​dan bukan tambahan kecil pada kotak teks. Hari ini jawabannya adalah tidak.

Apakah Anda akan menambahkan verifikasi tanda tangan ke decoder JWT?

Tidak. Verifikasi memerlukan kunci penerbit dan algoritma yang disematkan di luar token, dan halaman web yang meminta keduanya meminta kemampuan untuk memalsukan token. Keterbatasannya adalah fiturnya.

Mengapa menolak masukan dalam jumlah besar dibandingkan hanya memperlambatnya?

Karena "lambat" di tab browser berarti halaman tidak responsif, dan di ponsel sering kali berarti tab tersebut dimatikan dan masukan Anda hilang. Penolakan yang jelas dengan batasan yang ditentukan lebih berguna daripada pemintal yang tidak pernah berakhir.

Bisakah saya menggunakan ini secara offline?

Setelah halaman dimuat, ya — tidak ada perangkat yang memerlukan jaringan. Tidak ada pekerja layanan, jadi pemuatan pertama memerlukan koneksi.

Keterbatasan

  • Halaman ini sendiri merupakan daftar batasan; setiap bagian di atas menyatakan apa yang tidak dapat dilakukan oleh satu utilitas.
  • Batasan diterapkan dalam kode dan dilaporkan dalam antarmuka, tidak hanya didokumentasikan di sini.