Panduan
Injeksi formula CSV dan ekspor yang lebih aman
Tanda kutip CSV menjaga batas kolom, tetapi tidak mencegah spreadsheet menafsirkan sel sebagai formula. Pilih metode ekspor sesuai aplikasi tujuan dan uji di aplikasi tersebut.
Format mana yang sebaiknya dipilih?
Pilih berdasarkan peran setiap berkas dalam alur kerja.
- CSV untuk pemrosesan antarsistem → Pertahankan nilai dan ikuti spesifikasi parser penerima
- CSV yang dibuka orang di spreadsheet → Pilih keluaran yang memperlakukan nilai tak tepercaya sebagai teks, lalu uji di aplikasi tujuan
- Apakah tanda kutip cukup? → Melindungi sintaks CSV dan mencegah formula berjalan adalah dua hal berbeda
- Sanitasi mana yang tepat? → Perilaku aplikasi berbeda; jangan anggap satu transformasi cocok untuk semuanya
Sel CSV dapat ditafsirkan sebagai formula
Jika ekspor CSV memuat nilai dari formulir web atau basis data, Excel, LibreOffice Calc, atau aplikasi spreadsheet lain dapat menafsirkan sel yang diawali karakter seperti `=` sebagai formula. Jika penyerang dapat mengendalikan masukan itu, formula dapat membocorkan informasi atau menimbulkan dampak lain melalui aplikasi atau tindakan pengguna. Dampaknya bergantung pada aplikasi dan pengaturannya.
Tanda kutip CSV saja tidak mencegah formula
Mengapit kolom dengan tanda kutip ganda dan melakukan escape pada tanda kutip di dalamnya adalah penanganan sintaks agar koma dan baris baru tetap berada di kolom yang dimaksud. Penafsiran sel sebagai formula oleh spreadsheet adalah tahap berbeda. CSV yang di-escape dengan benar belum membuktikan bahwa injeksi formula telah dicegah.
Pilih keluaran teks sesuai aplikasi tujuan
Bedakan CSV untuk pemrosesan otomatis dari berkas yang akan dibuka orang di spreadsheet. Untuk penggunaan kedua, pertimbangkan pustaka atau format yang dapat menyimpan nilai secara eksplisit sebagai teks. Jika CSV wajib digunakan, uji cara aplikasi tujuan menangani nilai yang diawali `=`, `+`, `-`, atau `@`, lalu pilih mitigasi khusus aplikasi tersebut. Awalan tab atau apostrof dapat memengaruhi kompatibilitas atau mengubah nilai sebenarnya, sehingga bukan solusi universal.
Perhatikan delimiter dan batas sel
Koma, titik koma, tanda kutip, dan baris baru dalam nilai tak tepercaya dapat membuat sel yang tidak dimaksud jika keluaran dirangkai dengan keliru. Sel baru mungkin diawali penanda formula. Gunakan pustaka CSV standar untuk mengodekan kolom dengan benar, lalu tangani penafsiran formula secara terpisah. Jangan hanya mengandalkan penggabungan string atau pemeriksaan karakter pertama masukan.
Uji dengan membuka, menyimpan, lalu membuka kembali
Uji kasus batas seperti spasi awal, karakter kontrol, delimiter, dan tanda kutip di aplikasi spreadsheet yang didukung, termasuk setelah berkas disimpan dan dibuka kembali. OWASP memperingatkan bahwa Excel dapat menghapus tanda kutip atau escape saat proses itu, sehingga nilai yang sebelumnya dinetralkan dapat aktif lagi sebagai formula. Simpan data sumber untuk mesin secara terpisah dari keluaran yang diubah untuk tampilan spreadsheet.
Format yang disarankan
CSV
Cocok untuk: Bertukar tabel sederhana saat penerima memperlakukan isi sel sebagai data
Kurang cocok untuk: Mengekspor nilai tak tepercaya untuk spreadsheet tanpa mitigasi dan pengujian khusus aplikasi
Periksa sebelum mengekspor
- Tanda kutip dan escape CSV bukan batas keamanan terhadap eksekusi formula.
- Aplikasi spreadsheet berbeda dalam deteksi formula, peringatan, dan perilaku saat berkas disimpan ulang.
- Sebelum membagikan CSV berisi masukan tak tepercaya, uji di aplikasi tujuan, termasuk setelah disimpan dan dibuka kembali.