À strictement parler, la réponse est non . Un développeur ne peut pas empêcher un utilisateur de télécharger des fichiers de n'importe quel type ou extension.
Mais tout de même, l' attribut accept de <input type = "file">
peut aider à fournir un filtre dans la boîte de dialogue de sélection de fichier du système d'exploitation. Par exemple,
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox 42+) -->
<input type="file" accept=".xls,.xlsx" />
devrait fournir un moyen de filtrer les fichiers autres que .xls ou .xlsx. Bien que le page MDN pour input
element ait toujours dit qu'elle le supporte, à ma grande surprise, cela n'a pas fonctionné pour moi dans Firefox jusqu'à la version 42. Cela fonctionne dans IE 10+, Edge et Chrome.
Donc, pour prendre en charge Firefox plus de 42 ans avec IE 10+, Edge, Chrome et Opera, je suppose qu'il est préférable d'utiliser une liste de types MIME séparés par des virgules:
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
[ Comportement Edge (EdgeHTML): la liste déroulante du filtre de type de fichier affiche les types de fichiers mentionnés ici, mais ce n'est pas la valeur par défaut dans la liste déroulante. Le filtre par défaut est All files (*)
.]
Vous pouvez également utiliser des astérisques dans les types MIME. Par exemple:
<input type="file" accept="image/*" /> <!-- all image types -->
<input type="file" accept="audio/*" /> <!-- all audio types -->
<input type="file" accept="video/*" /> <!-- all video types -->
Le W3C recommande aux auteurs de spécifier à la fois les types MIME et les extensions correspondantes dans l' accept
attribut. Donc, la meilleure approche est:
<!-- 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 de la même: ici .
Référence: Liste des types MIME
IMPORTANT: L' utilisation de l' accept
attribut ne fournit qu'un moyen de filtrage dans les fichiers des types qui vous intéressent. Les navigateurs permettent toujours aux utilisateurs de choisir des fichiers de tout type. D' autres contrôles (côté client) doit être fait ( en utilisant JavaScript, une façon serait ce ), et certainement les types de fichiers doivent être vérifiés sur le serveur , en utilisant une combinaison de type MIME utilisant à la fois l'extension de fichier et sa signature binaire ( ASP .NET , PHP , Ruby , Java ). Vous pouvez également faire référence à ces tableaux pour les types de fichiers et leurs nombres magiques, pour effectuer une vérification côté serveur plus robuste.
Voici trois bonnes lectures sur les téléchargements de fichiers et la sécurité.
EDIT: Peut - être que la vérification du type de fichier à l'aide de sa signature binaire peut également être effectuée côté client à l'aide de JavaScript (plutôt que simplement en regardant l'extension) à l'aide de l'API de fichier HTML5, mais tout de même, le fichier doit être vérifié sur le serveur, car un utilisateur malveillant sera toujours en mesure de télécharger des fichiers en faisant une demande HTTP personnalisée.