travailler avec les données d'entrée de l'utilisateur en php. Ce qui est mieux?

StackOverflow https://stackoverflow.com/questions/1820754

  •  10-07-2019
  •  | 
  •  

Question

J'essaie de déterminer quel est le meilleur moyen de gérer les données qu'un utilisateur entre concernant les balises non souhaitables qu'il pourrait insérer:

  • strip_tags () - les balises sont supprimées et ne sont pas insérées dans la base de données
  • les balises sont insérées dans la base de données, mais lors de la lecture de ce champ et de son affichage à l'utilisateur, nous utiliserions htmlspecialchars ()

Quoi de mieux et y a-t-il un inconvénient dans ces domaines?

Cordialement

Était-ce utile?

La solution

Cela dépend de votre priorité:

  • s'il est important d'afficher des caractères spéciaux à partir d'une entrée utilisateur (comme sur StackOverflow, par exemple), vous devrez alors stocker ces informations dans la base de données et les nettoyer à l'écran. Dans ce cas, vous souhaiterez moins utiliser htmlspecialchars () pour afficher le résultat (si ce n'est quelque chose de plus sophistiqué)
  • si vous voulez seulement des commentaires en texte brut, utilisez strip_tags () avant de le coller dans la base de données. Ainsi, vous réduirez la quantité de données que vous devez stocker et le temps de traitement. lors de l'affichage des données à l'écran

Autres conseils

  

les balises sont insérées dans la base de données, mais lors de la lecture de ce champ et de son affichage à l'utilisateur, nous utiliserions htmlspecialchars ()

Ceci. Vous voulez généralement que les gens puissent taper moins que des signes et des esperluettes et les afficher comme tels sur la page. htmlspecialchars à chaque étape de sortie texte-à-HTML (que le texte provienne directement de l'entrée de l'utilisateur, de la base de données ou de tout autre endroit) est le moyen approprié d'y parvenir. S'amuser avec l'entrée n'est pas du tout une tactique appropriée pour traiter un problème d'encodage de sortie.

Bien sûr, vous aurez besoin d’un échappement ou d’un paramétrage différent pour insérer du texte dans une chaîne SQL .

Les mesures prises pour sécuriser la saisie de l'utilisateur dépendent entièrement du contexte dans lequel les données sont utilisées. Par exemple:

  • Si vous l'insérez dans une base de données SQL, vous devez utiliser des instructions paramétrées. Le mysql_real_escape_string () de PHP fonctionne également de manière décente.
  • Si vous souhaitez l'afficher sur une page HTML, vous devez alors supprimer ou écarter les balises HTML.
  • En général, chaque fois que vous mélangez les entrées de l'utilisateur avec une autre forme de balisage ou une autre langue, les éléments de cette langue doivent être échappés ou supprimés de l'entrée avant d'être placés dans ce contexte.

Le dernier point ci-dessus passe au point suivant: nombreux sont ceux qui estiment que l'entrée initiale doit toujours être conservée. Cela a beaucoup de sens quand, plus tard, vous décidez d'utiliser les données d'une manière différente et que, par exemple, les balises HTML ne sont pas un gros problème dans le nouveau contexte. De plus, si votre site est compromis, vous avez un enregistrement de l’entrée exacte donnée.

Liés spécifiquement aux balises HTML dans les entrées utilisateur destinées à être affichées sur une page HTML: s’il existe une raison concevable pour un utilisateur de saisir des balises HTML, il suffit de les échapper. Si ce n'est pas le cas, supprimez-les avant de les afficher.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top