English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

php过滤输入操作之htmlentities与htmlspecialchars用法分析

Cet exemple montre l'utilisation des fonctions php de filtrage des entrées htmlentities et htmlspecialchars. Partageons-le avec tous pour la référence, voici les détails :

Filtrer les entrées (c'est-à-dire toute donnée provenant des sources listées) signifie échanger ou supprimer les caractères non sécurisés. Assurez-vous de filtrer les données d'entrée avant qu'elles ne atteignent la couche de stockage de l'application. C'est la première ligne de défense. Si le formulaire de commentaires du site Web accepte l'HTML, par défaut, les visiteurs peuvent insérer sans entrave des balises <script> malveillantes dans les commentaires, comme suit :

<p>
  Mon test
</p>
<script>alert(123)</script>

Dans cet exemple, si ce commentaire n'est pas filtré, le code malveillant sera stocké dans la base de données et rendu dans les balises de marquage du site Web.

HTML

Nous pouvons utiliser les fonctions htmlentities ou htmlspecialchars pour filtrer l'HTML et convertir les caractères spéciaux en entités HTML correspondantes.

La fonction htmlentities convertit tous les caractères spéciaux contenant des "entités HTML" correspondantes, tels que les symboles monétaires (euro, livre sterling, etc.), les symboles de copyright, etc., tandis que htmlspecialchars ne remplace que certains caractères spéciaux, & " ' < >

ce2Cette fonction est assez stupide, elle ne remplace pas les guillemets simples par défaut

$str='<a href="test.html" rel="external nofollow" >\'page de test\'</a><script>alert(213)</script>'; 
//ne n'a pas échappé les guillemets simples
echo $str;
echo "<hr/>".PHP_EOL;
echo htmlentities($str);
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str);

doit être configuré2une paramètre ENT_QUOTES, voir la documentation PHP pour plus de détails

echo htmlentities($str,ENT_QUOTES,'UTF-8');-8'); //Les guillemets simples sont également échappés
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str,ENT_QUOTES,'UTF')-8');//Les guillemets simples sont également échappés

Les exemples ci-dessus ne peuvent pas distinguer htmlentities et htmlspecialchars, nous allons donc utiliser des caractères spéciaux, tels que l'euro, etc. htmlentities les échappera, mais htmlspecialchars ne le fera pas

echo htmlentities(' <>"').PHP_EOL;
echo "<hr/>".PHP_EOL;
echo htmlspecialchars(' <>"').PHP_EOL; //Pas d'échappement

Conclusion :Lors de la soumission d'un formulaire standard, vous pouvez utiliser strip_tags pour supprimer les balises HTML. Si vous devez conserver les balises HTML pour un éditeur de texte riche, vous pouvez utiliser htmlspecialchars pour filtrer les données de soumission.

Pour plus d'informations sur les contenus liés à PHP, les lecteurs intéressés peuvent consulter les sujets spéciaux de ce site : Tutoriel de conception sécurisée de programme PHP, Résumé des techniques de filtrage sécurisé PHP, Résumé des opérations et des opérateurs PHP, Résumé des techniques de programmation réseau PHP, Tutoriel d'introduction à la syntaxe de base PHP, Tutoriel d'introduction à la programmation orientée objet PHP, Résumé des utilisations des chaînes (string) PHP, php+Tutoriel d'introduction à l'opération de base de données MySQL et Recueil des techniques courantes d'opération de base de données PHP

J'espère que le contenu de cet article peut aider à la conception de programmes PHP.

Déclaration : Le contenu de cet article est tiré d'Internet, propriété de l'auteur original. Le contenu est apporté par les utilisateurs d'Internet et téléchargé spontanément. Ce site ne possède pas de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un email à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un email pour faire une plainte, et fournir des preuves pertinentes. Une fois confirmé, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.