Modul unggah file adalah salah satu tautan terlemah dalam aplikasi web. Kesalahan apa pun yang dibuat, bahkan yang Anda anggap kecil, dapat mengakibatkan kontrol server jatuh langsung ke tangan penyerang siber. Untuk alasan ini, pengembang perangkat lunak perlu mengetahui kesalahan paling umum dan beberapa metode serangan yang dapat terjadi.
Jadi apa gangguan sisi klien? Bagaimana Anda bisa melawan ini untuk menjaga situs Anda, dan pengguna Anda, aman?
Apa Itu Gangguan Sisi Klien?
Gangguan sisi klien adalah konsep dasar serangan aplikasi web secara keseluruhan. Sederhananya, itu berarti Anda tidak dapat lagi mempercayai data apa pun yang Anda kirim ke pengguna. Selain itu, gangguan sisi klien adalah salah satu fondasi pengembangan aplikasi yang aman. Jika Anda memeriksa modul pengunggahan file yang sedang Anda tangani dan mempertimbangkan gangguan sisi klien, data yang tidak dapat Anda percayai mencakup:
- Nama file yang diunggah.
- Content-Type dari file yang diunggah.
Kedua item ini ada di mana Anda memiliki kesempatan untuk memasukkan daftar putih sebagai pengembang perangkat lunak. Data nama file yang diunggah dapat berisi apa saja dengan gangguan sisi klien. Dengan data Jenis Konten dari file yang diunggah, bahkan jika penyerang mengunggah file .exe, file ini mungkin muncul sebagai gambar/jpeg di sistem.
Ekstensi File dan Daftar Putih
Saat mengembangkan modul unggah file, hal pertama yang harus dilakukan adalah proses daftar putih untuk ekstensi file. Misalnya, pengguna ingin mengupload file bernama "muo.jpeg". Anda harus memastikan bahwa ekstensi file yang ingin diunggah pengguna ini adalah .jpeg. Untuk ini, sistem harus memeriksa file yang diunggah dan melihat apakah itu salah satu ekstensi file yang diizinkan. Untuk memahami bagaimana Anda bisa melakukan ini, periksa kode PHP sederhana berikut:
$file_parts = pathinfo($namafile);
mengalihkan($file_parts['ekstensi'])
{
kasus "jpg":
merusak;kasus "kelelawar": // Atau exe, dll, jadi, dll.
merusak;
kasus "":
kasusBATAL: // Tidak ada ekstensi file
merusak;
}
Anda dapat melakukannya dengan blok kode yang mirip dengan yang di atas, atau Anda dapat menggunakan kelas dan fungsi yang disediakan oleh kerangka kerja yang Anda gunakan.
Berhati-hatilah untuk tidak membuat data ekstensi file dengan mem-parsing nama file sesuai karakter titik (.), karena penyerang dapat melewati langkah pemeriksaan ini dengan nama file seperti "muo.jpeg.php".
Apa itu Informasi Jenis Konten?
Informasi Jenis Konten adalah informasi yang dikirim dalam permintaan HTTP untuk setiap unggahan file. Browser internet mendeteksi info ini dan menambahkannya ke permintaan terkirim. Penyerang dapat mencoba mengubah informasi dengan gangguan sisi klien dan mem-bypass validasi sisi server. Pada tahap ini, pengembang memerlukan mekanisme kontrol untuk melakukan validasi atas informasi Content-Type. Ini saja tidak akan cukup; tetap saja, ini adalah masalah penting yang harus diperhatikan oleh pengembang.
Katakanlah Anda menyandikan mekanisme untuk memeriksa ekstensi file dengan benar, dan Anda hanya menerima file dengan ekstensi .jpeg. Selain mekanisme pencegahan ini, Anda dapat memeriksa informasi Content-Type just in kasus dan hanya menerima file dengan informasi gambar/jpeg, tingkat perlindungan ekstra terhadap serangan dunia maya
File Flash SWF dan Langkah Serangan
Ekstensi file dan data Content-Type tidak berarti apa-apa bagi browser internet yang mendukung plug-in seperti Adobe Flash Player. Meskipun dukungan untuk pemutar tersebut tidak lagi tersedia, file terkait tersebut masih dapat diinstal di banyak sistem, meskipun Flash tetap menjadi risiko keamanan. Dalam sistem yang belum mengambil tindakan pencegahan yang relevan, dimungkinkan untuk memanggil file Flash dengan
Untuk mengambil tindakan, pengembang perlu mengetahui jalur yang dapat diambil oleh penjahat dunia maya. Inilah bagaimana hal itu bisa terjadi:
- Penyerang jahat mengunggah SWF (format file Adobe Flash) bernama "image.jpeg" ke situs web target. Selama proses pengunggahan, dikonfirmasi dalam verifikasi daftar putih bahwa file yang diunggah penyerang memiliki ekstensi .jpeg. Verifikasi Content-Type dilewati dengan gangguan sisi klien. Bayangkan file ini, yang diunggah oleh pelaku ancaman, masuk ke "www (dot) situs target (dot) com/images/images.jpeg".
- Katakanlah penyerang memiliki situs web bernama penyerang (dot) com. Penyerang memanggil file image.jpeg yang diunggah ke situs target di situs web ini, menggunakan
- Pengguna yang tidak bersalah masuk ke penyerang (dot) com. Situs itu memanggil file SWF di www (dot) target-site (dot) com/images/image.jpeg dan menjalankan perintah yang diberikan ke SWF.
- Melalui ini, penyerang dunia maya dapat membuat tindakan permintaan HTTP untuk alamat situs target (dot) com tanpa diketahui oleh pengguna biasa. Dengan permintaan ini, penyerang akan menggunakan sesi pengguna yang tidak bersalah dan memintas cek CSRF.
Untuk memahami skenario serangan ini dengan lebih jelas, perhatikan kode berikut ada di HTML
gaya="tinggi: 1px; lebar: 1px;" data="www.target-site.com/images/image.jpeg" jenis="aplikasi/x-shockwave-flash" izinkan akses skrip="selalu" flashvars="c=baca&kamu=sesuatu"
Salah satu solusi terbaik adalah mengakses file yang diunggah dengan file upload via subdomain yang berbeda. Dalam skenario yang disebutkan di atas, Anda dapat mengakses file statis bukan dari domain yang sama, tetapi dari subdomain yang berbeda sebagai berikut: "http (titik dua)//file.target-site (dot) com/images/image.jpeg".
Solusi lain adalah menambahkan Konten-Disposisi: lampiran informasi ke respons HTTP saat Anda menerima permintaan akses ke file yang ingin Anda unggah.
Ambil Tindakan Pencegahan untuk Kerentanan Pengunggahan File
Unggahan file apa pun yang dapat dilakukan pengguna ke situs web berbahaya, jadi ini adalah salah satu masalah yang harus diperhatikan oleh pengembang. Jika penyerang menemukan kerentanan seperti itu, mereka dapat membuka shell di dalam situs dan dengan mudah mengeksploitasi informasi di server. Sangat penting untuk mengontrol semua file yang diunggah oleh pengguna, menerapkan metode daftar putih, dan menyembunyikan lokasi direktori yang diunggah jika memungkinkan.
Dan tentu saja, ada banyak langkah tambahan lain yang harus Anda lakukan untuk melindungi situs Anda, bahkan jika Anda melakukan semua tindakan pencegahan yang disarankan untuk mengunggah modul file. Menggunakan tajuk keamanan HTTP adalah salah satu langkah yang dapat Anda ambil.