A rigor di termini, la risposta è no . Uno sviluppatore non può impedire a un utente di caricare file di qualsiasi tipo o estensione.
Tuttavia, l' attributo accetta di <input type = "file">
può aiutare a fornire un filtro nella finestra di dialogo di selezione file del sistema operativo. Per esempio,
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox 42+) -->
<input type="file" accept=".xls,.xlsx" />
dovrebbe fornire un modo per filtrare file diversi da .xls o .xlsx. Sebbene la pagina MDN per input
element abbia sempre detto che supporta questo, con mia sorpresa, questo non ha funzionato per me in Firefox fino alla versione 42. Funziona in IE 10+, Edge e Chrome.
Quindi, per supportare Firefox più vecchio di 42 insieme a IE 10+, Edge, Chrome e Opera, immagino sia meglio usare un elenco separato da virgole di tipi MIME:
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
Comportamento [ Edge (EdgeHTML): il menu a discesa del filtro del tipo di file mostra i tipi di file menzionati qui, ma non è il valore predefinito nel menu a discesa. Il filtro predefinito è All files (*)
.]
Puoi anche usare gli asterischi nei tipi MIME. Per esempio:
<input type="file" accept="image/*" /> <!-- all image types -->
<input type="file" accept="audio/*" /> <!-- all audio types -->
<input type="file" accept="video/*" /> <!-- all video types -->
Il W3C raccomanda agli autori di specificare sia i tipi MIME che le estensioni corrispondenti accept
nell'attributo. Quindi, l' approccio migliore è:
<!-- 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 dello stesso: qui .
Riferimento: elenco di tipi MIME
IMPORTANTE: l' utilizzo accept
dell'attributo fornisce solo un modo per filtrare i file di tipi di interesse. I browser consentono ancora agli utenti di scegliere file di qualsiasi tipo. Dovrebbero essere effettuati controlli aggiuntivi (lato client) (usando JavaScript, un modo sarebbe questo ), e sicuramente i tipi di file DEVONO essere verificati sul server , usando una combinazione di tipo MIME usando sia l'estensione del file che la sua firma binaria ( ASP .NET , PHP , Ruby , Java ). Potresti anche fare riferimento a queste tabelle per i tipi di file e i loro numeri magici, per eseguire una verifica lato server più solida.
Ecco tre buone letture su upload di file e sicurezza.
EDIT: forse la verifica del tipo di file usando la sua firma binaria può essere fatta anche sul lato client usando JavaScript (piuttosto che semplicemente guardando l'estensione) usando l'API File HTML5, ma comunque, il file deve essere verificato sul server, perché un utente malintenzionato sarà comunque in grado di caricare file facendo una richiesta HTTP personalizzata.