La fonction Filter_Input est utilisée pour obtenir et filtrer les données d'entrée dans PHP. L'utilisation de base est la suivante:
<span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(type, variable_name, filter = FILTER_DEFAULT, options = </span><span><span class="hljs-literal">null</span></span><span>)
</span></span>
Type : Spécifiez le type de données d'entrée, tels que Input_get , input_post , input_cookie , etc.
variable_name : entrez le nom de la variable.
Filtre : le type de filtre appliqué, qui peut être une constante de filtre prédéfinie (par exemple, filter_validate_int ).
Options : Options supplémentaires (en option) pour les filtres.
Pour le traitement des fichiers de téléchargement d'utilisateurs, nous devons généralement accéder aux champs liés au téléchargement de fichiers via le tableau hyperglobal $ _Files . Bien que Filter_Input n'agisse pas directement sur le fichier lui-même, il peut être utilisé pour filtrer d'autres propriétés du fichier, telles que la taille et le type du fichier.
Lorsque les utilisateurs téléchargent des fichiers, nous nous soucions généralement du type, de la taille, du nom et d'autres informations du fichier. Ces informations peuvent être filtrées et vérifiées efficacement via Filter_Input , améliorant ainsi la sécurité des opérations de téléchargement.
Le type MIME d'un fichier est un moyen courant de déterminer si un fichier répond aux attentes. Nous pouvons utiliser Filter_Input pour vérifier si le fichier téléchargé par l'utilisateur est conforme à un type spécifique. Voici un exemple:
<span><span><span class="hljs-variable">$file_type</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_type'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file_type</span></span><span> !== </span><span><span class="hljs-string">'image/jpeg'</span></span><span> && </span><span><span class="hljs-variable">$file_type</span></span><span> !== </span><span><span class="hljs-string">'image/png'</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Types de fichiers non pris en charge!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Dans cet exemple, nous avons filtré le type de fichier et autorisé uniquement les images au format JPEG et PNG à télécharger. Filter_sanitize_string est utilisé pour supprimer les caractères illégaux. Bien que le filtrage de type MIME soit généralement effectué par le serveur, ce filtrage peut être utilisé comme garantie supplémentaire.
Pour la taille du fichier téléchargée par les utilisateurs, nous devons nous assurer que le fichier ne dépasse pas la limite de téléchargement maximale définie par le serveur. Habituellement, nous obtenons la taille du fichier téléchargé via $ _files ['fichier'] ['Size'] , mais nous pouvons également filtrer et vérifier les tailles de fichiers via filter_input .
<span><span><span class="hljs-variable">$file_size</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_size'</span></span><span>, FILTER_VALIDATE_INT);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file_size</span></span><span> > </span><span><span class="hljs-number">1000000</span></span><span>) { </span><span><span class="hljs-comment">// Limiter la taille maximale du fichier à1MB</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Fichier trop grand,Impossible de télécharger!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Dans ce code, filter_validate_int est utilisé pour vérifier que la taille du fichier est une valeur entière. Si la taille du fichier dépasse la valeur maximale définie (telle que 1 Mo), le message d'invite est sorti et le programme est terminé.
Le téléchargement de fichiers est une opération sensible dans le développement Web. S'il n'est pas validé et filtré, cela peut conduire à des vulnérabilités de sécurité (telles que le téléchargement de fichiers malveillants, l'écrasement des fichiers existants, etc.). La fonction filter_input peut améliorer la sécurité du processus de téléchargement dans les aspects suivants:
L'utilisation de filter_input pour filtrer le type de fichier et la taille du fichier soumis par les utilisateurs peuvent éviter certains risques de sécurité courants. Par exemple, empêcher les utilisateurs de télécharger des fichiers surdimensionnés ou des types de fichiers qui ne répondent pas aux attentes (telles que les fichiers de script).
<span><span><span class="hljs-variable">$file_type</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_type'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$file_type</span></span><span>, [</span><span><span class="hljs-string">'image/jpeg'</span></span><span>, </span><span><span class="hljs-string">'image/png'</span></span><span>])) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Type de fichier illégal!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Filter_Input peut également filtrer le nom du fichier d'origine du fichier pour éviter les caractères malveillants dans le nom du fichier et réduire le risque d'attaques d'injection de nom de fichier.
<span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_name'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^a-zA-Z0-9_\-\.]/'</span></span><span>, </span><span><span class="hljs-string">'_'</span></span><span>, </span><span><span class="hljs-variable">$file_name</span></span><span>);
</span></span>
Dans cet exemple, nous utilisons des expressions régulières pour remplacer les caractères illégaux dans le nom du fichier, garantissant que le nom de fichier téléchargé répond au format attendu et empêchant les problèmes de sécurité que les caractères spéciaux peuvent provoquer.
Lors du téléchargement de fichiers, si aucune vérification valide n'est effectuée, l'utilisateur peut télécharger un fichier avec le même nom que le fichier existant sur le serveur, ce qui entraîne le fichier d'origine. Pour éviter cela, nous pouvons filtrer et vérifier les noms de fichiers via la fonction filter_input lors du téléchargement du fichier.
<span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_name'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-string">"/uploads/<span class="hljs-subst">$file_name</span></span></span><span>")) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le fichier existe déjà,Veuillez modifier le nom du fichier!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Ce code évite le risque d'écrasement des fichiers en vérifiant si le chemin pour télécharger les fichiers a déjà le même nom de fichier.
Vous trouverez ci-dessous un exemple de gestionnaire de téléchargement de fichiers simples, qui combine la fonction filter_input pour montrer comment filtrer et vérifier les fichiers téléchargés par les utilisateurs.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'REQUEST_METHOD'</span></span><span>] == </span><span><span class="hljs-string">'POST'</span></span><span>) {
</span><span><span class="hljs-variable">$file_type</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_type'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-variable">$file_size</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_size'</span></span><span>, FILTER_VALIDATE_INT);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file_size</span></span><span> > </span><span><span class="hljs-number">1000000</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La taille du fichier dépasse la limite!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$file_type</span></span><span>, [</span><span><span class="hljs-string">'image/jpeg'</span></span><span>, </span><span><span class="hljs-string">'image/png'</span></span><span>])) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Types de fichiers non pris en charge!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">filter_input</span></span><span>(INPUT_POST, </span><span><span class="hljs-string">'file_name'</span></span><span>, FILTER_SANITIZE_STRING);
</span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^a-zA-Z0-9_\-\.]/'</span></span><span>, </span><span><span class="hljs-string">'_'</span></span><span>, </span><span><span class="hljs-variable">$file_name</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-string">"/uploads/<span class="hljs-subst">$file_name</span></span></span><span>")) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le fichier existe déjà,Veuillez modifier le nom du fichier!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-title function_ invoke__">move_uploaded_file</span></span><span>(</span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'file'</span></span><span>][</span><span><span class="hljs-string">'tmp_name'</span></span><span>], </span><span><span class="hljs-string">"/uploads/<span class="hljs-subst">$file_name</span></span></span><span>");
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Télécharger le fichier avec succès!"</span></span><span>;
}
</span></span>
La fonction Filter_Input est utilisée en PHP pour obtenir et filtrer les données à partir des demandes. Bien qu'il soit principalement utilisé pour traiter les données de GET, du post et d'autres demandes régulières, il peut également être utilisé pour traiter les informations pertinentes lorsque les utilisateurs téléchargent des fichiers. Grâce à un filtrage et à une vérification appropriés, la sécurité des opérations de téléchargement de fichiers peut être efficacement améliorée et des problèmes de sécurité courants tels que le téléchargement de fichiers malveillant, l'écrasement des fichiers, les types de fichiers illégaux, etc. peuvent être évités. Dans les applications pratiques, Filter_Input , en tant qu'outil auxiliaire, peut aider les développeurs à écrire des fonctions de téléchargement de fichiers plus sécurisées et fiables.