Mysql
 sql >> Base de données >  >> RDS >> Mysql

Entrées utilisateur, nettoyer et désinfecter avant d'envoyer à db

Tout d'abord, gardez le texte logique et propre :

trim() -- OK
htmlentities($comment, ENT_NOQUOTES)  -- No; do later
mysqli_real_escape_string()  -- Yes; required by API
nl2br()  -- No; see below

La logique derrière ces recommandations :les données de la base de données doivent être simplement des données. Pas des htmlentities, pas des br-tags. Mais, vous devez faire escape_string afin de passer des données de PHP à MySQL; les échappements ne seront pas stockés.

Mais... Ce n'est que l'étape intermédiaire. D'où viennent les données ? Les anciennes versions de PHP essaient de vous "protéger" en ajoutant des échappements et d'autres fichiers inutiles qui fonctionnent bien pour HTML, mais bousillent MySQL. Désactivez cette magie qui s'échappe et obtenez les données brutes.

Où vont les données ? HTML probablement ? Après SELECTing les données sortent de la table, puis faites d'abord htmlentities() et (optionnellement) nl2br();

Remarque, si vous prévoyez de conserver des éléments tels que <I> (pour l'italique), vous demandez des ennuis - de gros ennuis. Tout ce qu'un pirate informatique doit faire, c'est <script> ... pour injecter toutes sortes de méchancetés dans votre page Web et éventuellement dans tout votre système.