Ketika catatan teks berubah menjadi rumus saat diekspor
File ekspor dapat membuka tanpa pesan kesalahan dan tetap mengubah arti informasi. Kolom catatan yang seharusnya berisi teks mungkin ditafsirkan aplikasi spreadsheet sebagai rumus. Memeriksa jumlah baris saja tidak cukup untuk memastikan bahwa penerima melihat isi yang dikirim.
Contoh ini memakai teks uji yang tidak berbahaya, =1+2, tanpa tautan, perintah sistem, atau hubungan ke layanan lain. Tujuannya menelusuri perubahan tipe data dari catatan aplikasi ke lembar kerja.
Ikuti satu nilai melewati batas sistem
Pada aplikasi fiktif, catatan C-24 menyimpan teks persis =1+2. Kolom jumlah menyimpan angka 4. Layar aplikasi menampilkan catatan dan jumlah tersebut dengan benar.
Ekspor CSV menempatkan catatan dalam tanda kutip. Ketika penerima membukanya di aplikasi spreadsheet yang diperiksa, sel catatan dihitung dan menampilkan 3. Tanda kutip CSV membantu struktur berkas, tetapi dalam alur ini tidak menetapkan bahwa isi sel harus diperlakukan sebagai teks biasa.
Pemeriksaan sumber memperlihatkan bahwa penyimpanan aplikasi tidak rusak. Perubahan terjadi ketika penerima menafsirkan isi ekspor. Mengganti catatan di basis data menjadi “3” justru akan menghilangkan maksud pengguna dan menyembunyikan penyebabnya.
Tetapkan kontrak dengan penerima
Tim menanyakan kebutuhan sebenarnya: penerima perlu membaca catatan literal, menyortir referensi, dan menjumlahkan kuantitas. Mereka tidak memerlukan rumus yang berasal dari kolom catatan. Format kerja yang disepakati untuk tujuan ini adalah XLSX dengan tipe sel ditentukan oleh pembuat ekspor.
Pilihan tersebut tidak berarti CSV selalu salah atau semua aplikasi spreadsheet berperilaku sama. Cara impor, pengaturan aplikasi, serta isi kolom perlu diperiksa pada jalur yang akan digunakan. Panduan OWASP tentang CSV Injection menjelaskan risiko penafsiran nilai sebagai rumus dan keterbatasan pendekatan yang dianggap universal.
Gunakan kemampuan ekspor yang eksplisit
Dalam contoh, pembuat XLSX menggunakan XlsxWriter. Pemeriksaan dokumentasi worksheet menunjukkan perbedaan antara penulisan umum yang dapat mengenali rumus dan penulisan string secara eksplisit. Tim memilih write_string untuk catatan dan referensi tekstual, serta write_number untuk jumlah yang telah divalidasi sebagai angka.
Pilihan tipe bukan tebakan berdasarkan karakter pertama pada semua kolom. Makna kolom sudah ditentukan: catatan adalah teks, jumlah adalah angka. Nilai tidak perlu diubah dengan menambahkan tanda yang kemudian harus dihapus penerima.
Perubahan dibatasi pada pembuat ekspor ini. Jalur unduhan lain yang menghasilkan format berbeda harus dinilai sendiri; satu perbaikan tidak membuktikan semua ekspor aman.
Periksa hasil yang dibuka kembali
Berkas baru dibuat dari C-24, lalu dibuka dalam aplikasi penerima yang disepakati. Sel catatan menampilkan =1+2 secara literal dan mempunyai tipe teks pada pemeriksaan berkas. Sel jumlah tetap bernilai numerik 4, sehingga dapat dipakai dalam penjumlahan kuantitas.
Tim menyimpan dan membuka kembali berkas hasilnya. Catatan tetap =1+2, bukan 3. Catatan biasa “Periksa sisi kiri” juga tetap sama. Referensi tekstual 0017 mempertahankan nol awal, sedangkan jumlah 4 tidak diubah menjadi teks hanya untuk memaksa semua sel memakai satu perlakuan.
| Pemeriksaan | Hasil yang diperlukan |
|---|---|
| Catatan C-24 | Teks literal =1+2 |
| Jumlah C-24 | Angka 4 |
| Referensi tekstual | 0017, tetap sebagai referensi |
| Catatan biasa | Tidak ditambah atau dikurangi karakter |
Ekspor lama tetap menjadi bahan penelusuran. Organisasi menentukan apakah penerima perlu diberi berkas pengganti dan bagaimana versi itu dikenali. Sistem tidak diam-diam mengubah file yang sudah berada di perangkat orang lain.
Tutup penyebab, bukan hanya contoh
Catat kolom yang harus bertipe teks, perpustakaan dan metode yang digunakan, serta aplikasi penerima yang benar-benar diperiksa. Tambahkan contoh kecil ini ke pemeriksaan perubahan pembuat ekspor agar penggantian metode penulisan tidak mengembalikan perilaku lama.
Layanan integrasi dapat menilai batas pengiriman dan penafsiran seperti ini. Saat melaporkan masalah, kirim contoh yang aman, hasil sebelum dan sesudah ekspor, serta cara berkas dibuka. Jangan mengirim data pelanggan hanya untuk menunjukkan masalah yang dapat direproduksi dengan teks uji.