Sebenarnya, jawabannya adalah tidak . Pengembang tidak dapat mencegah pengguna dari mengunggah file jenis atau ekstensi apa pun.
Namun tetap saja, atribut accept<input type = "file">
dapat membantu menyediakan filter di kotak dialog pilih file OS. Sebagai contoh,
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox 42+) -->
<input type="file" accept=".xls,.xlsx" />
harus menyediakan cara untuk memfilter file selain .xls atau .xlsx. Meskipun halaman MDN untuk input
elemen selalu mengatakan bahwa ia mendukung ini, saya terkejut, ini tidak berfungsi untuk saya di Firefox hingga versi 42. Ini berfungsi di IE 10+, Edge, dan Chrome.
Jadi, untuk mendukung Firefox yang lebih tua dari 42 bersama dengan IE 10+, Edge, Chrome, dan Opera, saya kira lebih baik menggunakan daftar tipe-MIME yang dipisahkan koma:
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
Perilaku [ Edge (EdgeHTML): Dropdown filter tipe file menunjukkan tipe file yang disebutkan di sini, tetapi bukan default dalam dropdown. Filter default adalah All files (*)
.]
Anda juga dapat menggunakan tanda bintang di tipe-MIME. Sebagai contoh:
<input type="file" accept="image/*" /> <!-- all image types -->
<input type="file" accept="audio/*" /> <!-- all audio types -->
<input type="file" accept="video/*" /> <!-- all video types -->
W3C merekomendasikan penulis untuk menentukan tipe MIME dan ekstensi yang sesuai dalam accept
atribut. Jadi, pendekatan terbaik adalah:
<!-- Right approach: Use both file extensions and corresponding MIME-types. -->
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept=".xls,.xlsx, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
JSFiddle sama: di sini .
Referensi: Daftar tipe-MIME
PENTING: Menggunakan accept
atribut hanya menyediakan cara pemfilteran dalam file tipe yang menarik. Browser masih memungkinkan pengguna untuk memilih file jenis apa pun. Pemeriksaan tambahan (sisi klien) harus dilakukan (menggunakan JavaScript, salah satu caranya adalah ini ), dan pasti jenis file HARUS diverifikasi di server , menggunakan kombinasi tipe MIME menggunakan ekstensi file dan tanda tangan binernya ( ASP) .NET , PHP , Ruby , Java ). Anda mungkin juga ingin merujuk ke tabel ini untuk jenis file dan angka ajaibnya, untuk melakukan verifikasi sisi server yang lebih kuat.
Berikut adalah tiga bacaan yang bagus tentang pengunggahan file dan keamanan.
EDIT: Mungkin verifikasi jenis file menggunakan tanda tangan binernya juga dapat dilakukan di sisi klien menggunakan JavaScript (bukan hanya dengan melihat ekstensi) menggunakan HTML5 File API, tetapi tetap saja, file tersebut harus diverifikasi di server, karena pengguna jahat masih dapat mengunggah file dengan membuat permintaan HTTP khusus.