Kemas Kini Terakhir: 20 Ogos, 2026

Spreadsheet Security Best Practices to Prevent Breaches & Data Leaks

Amalan Terbaik Keselamatan Hamparan untuk Pembangun

Hamparan kerja mengendalikan operasi perniagaan moden. Dari unjuran kewangan dan laporan lembaga eksekutif kepada import pengguna secara pukal, eksport pengebilan, dan set data pembelajaran mesin, format seperti .xlsx, .xlsm, dan .csv merupakan asas kepada aliran kerja perusahaan. Oleh kerana kepopularan ini, jurutera perisian secara rutin menulis kod yang direka untuk menjana, memasukkan, mengurai, menukar, dan mengeksport fail hamparan kerja.

Namun, pembangun kerap memperlakukan hamparan kerja sebagai data tabular yang tidak berbahaya—setara digital dengan fail teks rata. Pada kenyataannya, hamparan kerja moden adalah persekitaran pelaksanaan aktif yang mampu menjalankan pengiraan dinamik, menyelesaikan titik akhir luaran, memanggil makro sistem, dan menyematkan objek binari sewenang-wenanya. Apabila diperlakukan secara cuai, paip pemprosesan hamparan kerja menjadi sasaran menguntungkan untuk Remote Code Execution (RCE), Formula Injection (CSV Injection), Server-Side Request Forgery (SSRF), XML External Entity (XXE), dan kebocoran data sulit.

Di bawah ini ialah panduan teknikal untuk melaksanakan amalan kejuruteraan pertahanan semasa mengendalikan hamparan kerja di seluruh susunan perisian anda.

1. Menetralisir Suntikan Formula (CSV & Suntikan Hamparan)

Suntikan Formula—sering dirujuk sebagai Suntikan CSV—berlaku apabila input pengguna yang tidak dipercayai ditulis secara langsung ke dalam sel hamparan kerja tanpa sanitasi yang betul.

Apabila pengguna akhir atau pentadbir membuka fail yang dijana dalam Microsoft Excel, Google Sheets, atau LibreOffice Calc, sebarang nilai sel yang diawali dengan aksara fungsi tertentu akan ditafsirkan dan dijalankan sebagai formula aktif dan bukannya dipaparkan sebagai teks statik.

Mekanisme Ancaman

Penyerang menggunakan suntikan formula untuk melaksanakan dua kelas serangan utama:

  1. Pencurian Data: Mengeksploitasi fungsi seperti HYPERLINK untuk secara senyap menambah data sel bersebelahan yang sensitif kepada parameter pertanyaan yang dikawal oleh penyerang.
  2. Pelaksanaan Perintah: Menggunakan formula Dynamic Data Exchange (DDE) (contohnya, dalam konfigurasi warisan) atau pautan pengendali protokol untuk memicu binari sistem atau melancarkan URL berniat jahat.

Aksara permulaan yang berbahaya termasuk:

  • = (Pengiraan langsung atau panggilan fungsi)
  • + (Penambahan formula atau pemanggil fungsi implisit)
  • - (Pengurangan formula atau awalan penyangkalan)
  • @ (Pemanggilan formula tatasusunan dinamik dalam versi Excel moden)
  • \t (Aksara tab) atau \r (Kembalian kereta) (digunakan untuk mengelak penapis naif)
  • | atau % (Operasi paip atau panggilan shell dalam penonton hamparan lembaran berasaskan Unix)

Pertahanan Kejuruteraan

  • Prapenggalan Aksara (Escaping Petikan Tunggal): Jika input rentetan yang tidak dipercayai bermula dengan =, +, -, @, \t, atau \r, tambahkan petikan tunggal (') di hadapan rentetan sebelum menulisnya ke sel. Excel dan LibreOffice menganggap petikan tunggal di permulaan sebagai arahan pemformatan, memaksa sel memaparkan secara literal teks sambil mengeluarkan petikan daripada output yang kelihatan.
  • Perpustakaan Serialisasi Ketat: Jangan sesekali membina fail CSV atau XLSX menggunakan interpolasi rentetan mentah (contoh, f"{user_input_1},{user_input_2}\n"). Bergantung pada perpustakaan serialisasi tabular yang telah teruji dalam pertempuran yang menguruskan pelarian pemisah RFC 4180, pembungkusan medan, dan penggandaan petikan secara automatik.
  • Penguatkuasaan Jenis Sel: Apabila menjana fail OpenXML (.xlsx) secara programatik, tentukan secara eksplisit jenis data sel sebagai String (atau InlineString) dan jangan biarkan enjin meneka jenis sel daripada nilai.

2. Pengukuhan Saluran Pengambilan & Pengurai

Menganalisis hamparan kerja yang dimuat naik oleh pengguna membuka sistem backend kepada permukaan serangan pada peringkat parser yang signifikan. Fail .xlsx moden ialah arkib ZIP termampat yang mengandungi dokumen XML yang saling bergantung mengikut Konvensyen Pembungkusan Terbuka (OPC).

Menganalisis XML yang tidak dipercayai pada backend membuka perkhidmatan anda kepada eksploitasi parser klasik jika konfigurasi parser dibiarkan pada tetapan lalai.

Strategi Mitigasi:

  • Lumpuhkan DTD dan Entiti Luaran (Pertahanan XXE): Pastikan enjin XML anda secara eksplisit melarang Definisi Jenis Dokumen (DTD) dan melumpuhkan resolusi skema luaran (disallow-doctype-decl = true, resolve-external-entities = false). Kegagalan melakukannya boleh membenarkan fail .xlsx yang dimuat naik membaca fail pelayan tempatan (seperti /etc/passwd) atau mengintai perkhidmatan awan dalaman.
  • Lindungi daripada Bom Penyahmampatan (Bom ZIP): Pengguna berniat jahat boleh menghantar arkib kecil yang menyahmampat menjadi berpuluh gigabait data XML berulang, menyebabkan kerosakan memori dan menghabiskan ruang cakera. Jejaki bait tidak termampat semasa pengekstrakan, dan tetapkan had keras pada saiz arkib termampat serta jejak memori keseluruhan yang telah dinyahmampat.
  • Gunakan Pengurai Penstriman: Hindari memuat lembaran kerja besar ke dalam representasi Model Objek Dokumen (DOM) dalam memori. Untuk import kumpulan besar, gunakan penstriman, berasaskan SAX, atau iterator baris-demi-baris berpecah untuk memastikan penggunaan memori backend tetap konstan.

3. Kawalan Makro dan Sanitasi Kandungan Aktif

Makro Visual Basic for Applications (VBA), muatan OLE (Object Linking and Embedding), dan skrip terbenam merupakan antara vektor serangan yang paling berterusan dalam pengkomputeran desktop.

Amalan Terbaik Pembangun:

  • Terapkan Polisi Sambungan Ketat: Tolak format fail yang menyokong makro (.xlsm, .xltm, .xlsb, atau warisan .xls) di pintu gerbang API anda kecuali terdapat keperluan perniagaan yang disahkan dan tidak dapat diubah untuk memprosesnya.
  • Terapkan Format .xlsx Bersih: Format kontena standard .xlsx direka secara struktural tanpa sokongan makro. Sebarang kod makro yang terkandung dalam fail .xlsx akan menjadikan format fail tidak sah dalam enjin Office yang mematuhi piawaian.
  • Periksa dan Buang Aliran Aktif: Jika perkhidmatan anda memproses lampiran sewenang-wenangnya, integrasikan proses sanitasi automatik yang membuang binari projek VBA (vbaProject.bin), kawalan ActiveX, dan pakej OLE terbenam sebelum menyimpan fail dalam storan objek atau menyediakannya kepada klien lain.

4. Mencegah SSRF Semasa Pratonton Tanpa Kepala dan Penukaran PDF

Aplikasi perusahaan moden biasanya menawarkan kad pratonton dokumen atau penjanaan laporan PDF automatik. Untuk mencapainya, bahagian belakang kerap menggunakan suite pejabat tanpa kepala (contohnya, LibreOffice dalam mod tanpa kepala) atau pelayar tanpa kepala.

Hamparan kerja boleh mengandungi kebergantungan luaran dinamik, seperti formula imej berpaut (=IMAGE("http://internal-host/...")), pautan OData jauh, atau bingkai web terbenam. Apabila pemproses tanpa kepala memaparkan hamparan kerja, ia mungkin secara automatik mengambil sumber berpaut ini, mencetuskan Server-Side Request Forgery (SSRF).

Langkah Pertahanan Berlapis:

  • Isolasi Persekitaran Penukaran: Jalankan perkhidmatan rendering tanpa kepala dalam mikro-kontena berpasir atau fungsi tanpa pelayan sementara yang dilengkapi dengan keistimewaan sistem minimum.
  • Paksa Pengasingan Rangkaian: Letakkan pekerja rendering dokumen dalam subnet terhad yang tidak mempunyai akses laluan ke VPC dalaman anda, pangkalan data peribadi, atau titik akhir metadata awan (169.254.169.254).
  • Lumpuhkan Penyelesaian Sumber Jauh: Hantar bendera konfigurasi kepada enjin rendering anda untuk menghalang penyelesaian aset berasaskan rangkaian (contohnya, mengarahkan LibreOffice menolak pemuatan sumber luaran semasa rutin eksport).

5. Perlindungan Lembaran vs. Penyulitan Fail Kriptografi Sebenar

Salah satu salah faham yang paling berterusan di kalangan pasukan produk ialah perbezaan antara Perlindungan Lembaran Kerja/Buku Kerja asli Excel dan Penyulitan Kriptografi.

Ilusi Sel “Terkunci”

Ciri “Protect Sheet” dan “Protect Workbook” asli Excel adalah kemudahan pada tahap UI yang direka untuk mengelakkan penyuntingan tidak sengaja oleh pekerja pejabat. Ia tidak menggunakan halangan akses kriptografi. Skrip asas boleh menanggalkan tag perlindungan lembaran terus daripada fail XML asas dalam arkib .xlsx dalam beberapa saat, menjadikan sekatan tersebut tidak berguna terhadap gangguan yang disengajakan.

Perlindungan Kriptografi Sebenar:

  • Penghantaran dan Penyulitan At-Rest: Simpan eksport hamparan sensitif pada volum storan yang disulitkan dengan piawaian moden (contoh, AWS S3 SSE-KMS, Azure Storage Encryption) dan pindahkan mereka secara ketat melalui TLS 1.3.
  • Penyulitan OpenXML Standard: Apabila hamparan mesti dilindungi kata laluan untuk pengedaran, gunakan penyulitan OpenXML AES-256 yang standard industri dan bukannya penyulitan Office XOR lama.
  • Redaksi Peringkat Pangkalan Data (RBAC): Terapkan Kawalan Akses Berasaskan Peranan pada lapisan pangkalan data dan aplikasi sebelum membina hamparan. Jika pengguna yang mengeksport tidak mempunyai kebenaran untuk melihat Nombor Keselamatan Sosial, ID akaun dalaman, atau margin kasar, kecualikan lajur tersebut daripada pertanyaan sepenuhnya. Jangan sekali-kali meninggalkan data sensitif dalam baris atau lajur yang “tersembunyi”.

6. Kawalan Akses, Pengedaran, dan Log Audit

Kerana hamparan adalah fail mudah alih dan berdiri sendiri, ia sering melangkaui kawalan perimeter berpusat setelah dimuat turun.

Amalan Terbaik Pembangun:

  • Hidangkan melalui URL Pra-tandatangan yang Dihubungi, Jangka Pendek: Jangan sekali-kali meletakkan eksport hamparan yang dijana ke dalam baldi yang boleh diakses secara umum. Jana URL pra-tandatangan berjangka masa (dengan tarikh luput kurang daripada 5 minit) yang diikat kepada sesi pengguna yang disahkan dan diberi kuasa.
  • Audit Eksport Menyeluruh: Anggap setiap tindakan eksport sebagai peristiwa akses data. Catat ID pengguna, ID penyewa, parameter pertanyaan, cap masa penjanaan, dan alamat IP penerima dalam lejar audit yang tidak boleh diubah.
  • Penyingkiran Metadata: Singkirkan metadata penyahpepijatan dalaman, laluan fail pelayan tempatan, akaun pengarang, dan sejarah penyuntingan formula daripada sifat dokumen akhir sebelum menyajikan fail kepada klien luar.

Senarai Semak Ringkasan untuk Pembangun

Kategori AncamanKelemahan TerasMitigasi Utama
Penjanaan DataSuntikan Formula / Suntikan CSVAwalan karakter berbahaya (=, +, -, @) dengan '; gunakan perpustakaan serialisasi yang kukuh.
Pengambilan FailXXE & Bom PenyahmampatanLumpuhkan DTD dan entiti luar dalam pengurai XML; tegakkan had penyahmampatan arkib.
Jenis FailMakro Berbahaya & Objek OLESenarai putih hanya .xlsx; buang aliran makro (vbaProject.bin) semasa muat naik.
PemaparanSSRF melalui Penukar Tanpa KepalaPekerja pemaparan sandbox; sekat egress rangkaian ke VPC dalaman dan titik akhir metadata.
KerahsiaanPerlindungan Lembaran Tidak BerkesanKecualikan medan sensitif pada lapisan pertanyaan; jangan sekali-kali bergantung pada penguncian sel UI atau lajur tersembunyi.
PengedaranPendedahan Data Tidak TerkawalSediakan muat turun melalui URL pra-tandatangan yang akan luput; rekod jejak audit berstruktur bagi semua operasi eksport.

Soalan Lazim (FAQ)

Q1. Adakah mengeksport data ke fail CSV standard sepenuhnya selamat daripada pelaksanaan kod? Tidak, kerana aplikasi hamparan lembaran secara automatik mentafsirkan aksara permulaan seperti =, @, +, atau - sebagai formula aktif, yang boleh mengekstrak kandungan sel atau memanggil arahan tempatan.

Q2. Bolehkah kata laluan lembar kerja Excel digunakan untuk melindungi data sensitif daripada pembangun atau pengguna yang tidak dibenarkan? Tidak, kata laluan perlindungan lembar kerja dan buku kerja asli hanya mengehadkan penyuntingan pada tahap UI dan boleh dibuang secara langsung daripada fail XML asas tanpa alat pemulihan kata laluan.

Q3. Apakah cara paling selamat untuk mencegah serangan Entiti Luar XML (XXE) semasa mengurai fail .xlsx? Konfigurasikan pengurai XML anda untuk secara eksplisit melarang DTD dalam baris dan melumpuhkan penyelesaian skema dan entiti luaran sebelum mengurai fail XML dalaman arkib.

Q4. Mengapa berbahaya bergantung pada “hidden columns” dalam hamparan kerja yang dieksport untuk menyembunyikan ID dalaman atau metrik sensitif? Lajur tersembunyi tetap sepenuhnya hadir dalam muatan data asas dan boleh didedahkan dengan satu klik dalam antara muka hamparan kerja atau dibaca secara langsung daripada kandungan fail mentah.

Q5. Bagaimana saya dapat mencegah Server-Side Request Forgery (SSRF) semasa menjana ringkasan PDF atau pratonton thumbnail hamparan kerja pengguna? Jalankan enjin rendering dalam kontena terasing yang dibatasi rangkaian yang secara tegas melarang akses rangkaian keluar ke subnet peribadi dan perkhidmatan metadata awan.

Lihat Juga