"Une désinfection suffisante" dépend entièrement de l'environnement dont vous parlez. La désinfection pour MySQL doit être considérée comme entièrement séparée de la désinfection pour la sortie Web, et vous devez les gérer séparément pour éviter beaucoup de tracas.
Nettoyage pour MySQL
mysql_real_escape_string()
nettoiera un élément de données et le rendra sûr à mettre à l'intérieur d'une requête SQL.- Tout autre type de données malveillantes, telles que les balises HTML à l'intérieur de la chaîne, doit être absolument ignorée. Essayer de le manipuler ici vous causera des maux de tête lorsque vous essaierez de le "dé-manipuler" plus tard après l'avoir sorti de la base de données. De mauvaises "données Web" ne peuvent pas nuire à votre base de données.
Désinfection pour la sortie
htmlspecialchars($val)
au moment de la sortie empêchera toute balise malveillante d'être affichée, car<
et>
les caractères sont convertis en leurs représentations d'entité et non rendus en tant que délimiteurs de balises.- Utilisez le
ENT_QUOTES
modificateur si vous affichez quelque chose qui se trouve dans l'attribut entre guillemets d'un élément HTML, tel que<input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />
Cela devrait être tout ce dont vous avez besoin, sauf si vous avez des exigences particulières. strip_tags()
ne devrait pas vraiment être utilisé pour le nettoyage, car il peut être trompé avec du HTML mal formé. La désinfection est un objectif louable, et si vous pouvez séparer vos contextes, vous rencontrerez moins de problèmes de manipulation de données entre eux.