Sistem untuk menerima berkas dari pengguna sangat berguna, tetapi jika tidak dirancang dengan baik, dapat menjadi kerentanan yang serius. Penyerang mencoba mengeksploitasi ungahan untuk menjalankan kode arbitrer, menghabiskan kapasitas server, mendistribusikan berkas tidak sah, dan lainnya.
Ancaman utama yang dapat muncul antara lain:
Dasar dari perlindungan adalah "pertahanan berlapis". Merancang dengan beberapa lapisan pertahanan memberikan efektivitas daripada bergantung pada satu pertahanan saja.
Batasi ekstensi yang diizinkan, dan tidak hanya memutuskan berdasarkan ekstensi saja. Pastikan untuk memverifikasi tanda tangan berkas (magic number) untuk memeriksa isi. Jangan percayai header Content-Type dan implementasikan proses untuk mencegah metode penghindaran seperti ekstensi ganda dan NULL byte.
Jangan simpan nama berkas yang disediakan pengguna apa adanya. Gantilah dengan nama unik menggunakan UUID atau hash plus stempel waktu, dan simpan nama berkas asli sebagai metadata. Proses karakter khusus dan batas panjang juga penting.
Penting untuk menyimpan berkas yang diunggah di luar root web, sehingga tidak dapat dijalankan langsung. Jika memungkinkan, simpan di penyimpanan objek khusus (misalnya: S3) dan buat tautan unduh melalui aplikasi. Batasi folder penyimpanan dengan hak akses baca/tulis minimum tanpa hak eksekusi.
Atur batas ukuran berkas, dan terapkan kontrol mengenai jumlah ungahan bersamaan serta pengaturan laju untuk memastikan ketersediaan layanan. Jika menerima berkas terkompresi (ZIP, dll.), perlu memeriksa setiap berkas setelah diekstrak.
Segera setelah unggahan, jalankan pemindaian virus (jika mungkin dengan beberapa mesin) dan untuk PDF/Office, lakukan penghilangan melalui CDR (Content Disarm & Reconstruct). Untuk gambar, melakukan pengkodean ulang (memuat → menghasilkan berkas baru) efektif dalam menghilangkan data tidak sah yang disematkan.
Pastikan komunikasi dilindungi dengan TLS (HTTPS) dan implementasikan tindakan seperti token CSRF. Tambahkan Content-Disposition: attachment
atau X-Content-Type-Options: nosniff
pada respons unduhan untuk mencegah kesalahan perilaku oleh browser.
Catat dengan detail siapa yang menangani berkas dan kapan, dan atur alert untuk perilaku abnormal (unggahan frekuensi tinggi atau banyak penolakan). Menyimpan hash juga berguna untuk integritas berkas.
Setelah implementasi, lakukan pengujian kerentanan yang berfokus pada unggahan berkas (injeksi shell, penghindaran ekstensi, path traversal, dll.) dan secara berkala tinjau kembali.
Yang akan diperkenalkan di sini adalah UploadF (uploadf.com), yang mendukung PC/Smartphone, fitur drag & drop, unggahan 100 berkas secara bersamaan, dengan keunggulan dalam kemudahan penggunaan, namun dalam desain layanan, beberapa perhatian dan inovasi perlu dipertimbangkan sebagai berikut.
Item Pemeriksaan | Fokus Pelaksanaan/Pemeriksaan |
---|---|
Pembatasan Daftar Putih Ekstensi | Hanya izinkan format yang diperlukan. Gunakan daftar hitam sebagai tambahan. |
Pemeriksaan MIME/Signature | Verifikasi apakah ekstensi dan isi sesuai (pemeriksaan magic number). |
Penamaan Ulang Berkas | Ganti dengan UUID atau nama hash dan kelola nama asli sebagai metadata. |
Penghapusan Karakter Khusus | Penghapusan atau penolakan `/`, `\`, `..`, NULL, dll. |
Direktori Penyimpanan | Simpan di luar root web atau di penyimpanan objek. |
Hak Folder | Larangan eksekusi, hak baca/tulis minimal (prinsip hak akses paling sedikit). |
Ukuran Berkas Maksimal/Miminal | Jelaskan batas dan periksa setelah ekstraksi ZIP, dll. |
Kontrol Ungahan Bersamaan | Pembatasan jumlah paralel, kontrol laju, pengaturan timeout. |
Pemindaian Virus / CDR | Pemindaian segera setelah unggahan dan penghilangan jika diperlukan. |
Enkripsi Komunikasi (HTTPS) | Wajibkan TLS (mencegah serangan Man-in-the-Middle). |
Tindakan CSRF | Implementasikan pemeriksaan berbasis token. |
Pengaturan Header Respons | Tambahkan Content-Disposition: attachment , X-Content-Type-Options: nosniff , dll. |
Pencatatan Log & Peringatan | Audit tindakan unggahan dan beri notifikasi saat terjadi anomali. |
Tinjauan Keamanan Berkala | Lakukan pengujian kerentanan dan penetrasi secara berkala. |
Penghapusan Berkas Lama Secara Otomatis | Desain untuk penghapusan total setelah periode retensi berakhir. |
Kontrol Akses / Otorisasi | Kelola hak akses dengan ketat berdasarkan unit pengguna / grup. |
Fungsi pengunggahan berkas memiliki nilai guna dan risiko. Mengintegrasikan pertahanan berlapis yang dijelaskan di atas (daftar putih, pemeriksaan tanda tangan, pemisahan lokasi penyimpanan, upaya pencegahan malware, audit log, dll.) dalam desain dapat mengurangi risiko serangan secara signifikan.
Penting untuk menyampaikan kepada pengguna bahwa fungsi ini "mudah digunakan dan aman". Misalnya, layanan dengan fitur-fitur yang dapat dikelola pengguna, seperti UploadF (uploadf.com) yang memiliki penghapusan individual dan pengaturan waktu penyimpanan, dapat memberikan rasa percaya yang lebih besar.
※ Di atas adalah contoh sumber referensi saat artikel ditulis. Silakan periksa dokumentasi resmi masing-masing untuk informasi implementasi yang lebih rinci dan informasi ancaman terkini.