Perpustakaan parsing JSON minimalis baharu yang dipanggil sj.h telah mencetuskan perbincangan hangat dalam komuniti pembangun mengenai keseimbangan antara kesederhanaan dan keselamatan dalam perisian sumber terbuka. Perpustakaan ini, yang hanya mempunyai 150 baris kod C99, menjanjikan sifar peruntukan dan keadaan minimum sambil menyediakan keupayaan parsing JSON asas.
Spesifikasi Perpustakaan:
- Saiz: ~150 baris kod C99
- Memori: Sifar peruntukan dengan keadaan minimum
- Ciri-ciri: Mesej ralat dengan lokasi baris:lajur
- Had: Tiada penghuraian nombor atau rentetan terbina dalam
- Lesen: Domain awam ( Unlicense )
Kebimbangan Keselamatan Menjadi Tumpuan Utama
Kontroversi utama berpusat pada kelemahan keselamatan yang berpotensi dalam kod perpustakaan tersebut. Penyelidik keselamatan telah mengenal pasti isu dengan limpahan integer bertanda yang boleh mencetuskan tingkah laku tidak terdefinisi apabila memproses input tertentu. Perpustakaan ini tidak memeriksa limpahan apabila menambah kaunter kedalaman atau nombor baris/lajur, yang berpotensi dieksploitasi dengan fail JSON berniat jahat yang mengandungi struktur bersarang mendalam atau baris yang sangat panjang.
Pengkritik berpendapat bahawa mana-mana perpustakaan parsing JSON sepatutnya mengendalikan kes-kes tepi ini dengan selamat, terutamanya kerana JSON sering datang dari sumber yang tidak dipercayai. Mereka menunjukkan bahawa walaupun perpustakaan ini mungkin berfungsi dengan baik untuk persekitaran terkawal, ia boleh menjadi risiko keselamatan jika diterima pakai dalam sistem pengeluaran yang memproses data luaran.
Nota: Tingkah laku tidak terdefinisi merujuk kepada kod yang tidak mempunyai hasil yang boleh diramal mengikut spesifikasi bahasa pengaturcaraan.
Isu Keselamatan yang Dikenal Pasti:
- Limpahan integer bertanda dalam pembilang kedalaman
- Tiada pemeriksaan limpahan untuk nombor baris/lajur
- Potensi tingkah laku tidak ditentukan dengan input berniat jahat
- Penghuraian longgar yang menerima JSON yang cacat bentuk
- Kedalaman sarang maksimum dihadkan oleh INT_MAX (biasanya 2+ bilion)
Falsafah Perpustakaan Minimum
Penyokong perpustakaan ini mempertahankan pendekatannya, menekankan bahawa tidak setiap perisian memerlukan ciri keselamatan gred perusahaan. Mereka berpendapat bahawa perpustakaan ini melayani niche tertentu - pembangun yang memerlukan parsing JSON yang ringan dan mudah untuk persekitaran terkawal atau sistem terbenam di mana sumber adalah terhad.
Perdebatan ini mencerminkan perpecahan falsafah yang lebih luas dalam pembangunan perisian. Sesetengah pembangun lebih suka perpustakaan komprehensif yang mengendalikan setiap kes tepi yang mungkin, manakala yang lain memilih alat minimum yang melakukan satu perkara dengan baik dan meninggalkan kerumitan tambahan kepada pengguna.
Perbandingan dengan Perpustakaan Lain:
- cJSON: Lebih komprehensif, digunakan secara meluas dalam pengeluaran
- nlohmann/json: Perpustakaan C++ dengan 122 juta ujian unit, 13 tahun pembangunan
- simdjson: Dioptimumkan untuk prestasi
- json.lua: Pelaksanaan Lua tulen, lebih perlahan tetapi mudah alih
Kesan Dunia Sebenar dan Kebimbangan Penggunaan
Perbincangan ini telah menyerlahkan masalah biasa dalam perisian sumber terbuka: projek hobi yang terbukti berguna sering berakhir dengan diterima pakai dalam sistem pengeluaran tanpa semakan keselamatan yang betul. Walaupun lesen domain awam perpustakaan dengan jelas menyatakan ia datang tanpa waranti, pengkritik bimbang bahawa pembangun mungkin menggunakannya secara tidak sesuai dalam aplikasi sensitif keselamatan.
Beberapa ahli komuniti telah mencadangkan pembaikan mudah, termasuk menambah had kedalaman dan semakan limpahan yang akan mengekalkan kesederhanaan perpustakaan sambil menangani kebimbangan keselamatan yang paling serius. Tampung yang dicadangkan yang mengehadkan kedalaman bersarang kepada 999 tahap menunjukkan bagaimana perubahan minimum boleh meningkatkan keselamatan dengan ketara tanpa menjejaskan falsafah teras perpustakaan.
Perpustakaan sj.h mewakili kajian kes yang menarik dalam ketegangan berterusan antara kesederhanaan dan keteguhan dalam pembangunan perisian. Walaupun ia mungkin tidak sesuai untuk semua kes penggunaan, ia berfungsi sebagai peringatan bahawa projek berbeza mempunyai keperluan berbeza, dan kadangkala penyelesaian paling mudah adalah tepat apa yang diperlukan.
Rujukan: sj.h