Il y a deux choses très importantes que vous devez faire pour éviter de graves problèmes de sécurité.
-
Vous devez échapper l'entrée utilisateur avant de la mettre dans votre requête SQL. Échapper signifie échapper tous les caractères spéciaux tels que
'; heureusement, il existe une fonction qui le fait déjà automatiquement :mysql_real_escape_string .Si vous n'échappez pas à l'entrée de l'utilisateur, des choses désagréables pourraient se produire. Imaginez que votre requête est
INSERT INTO userdata VALUES ('$user_data'). Imaginez maintenant que l'utilisateur a écrit'; DROP DATABASE userdata;.Si vous n'y échappez pas, votre requête deviendra :
INSERT INTO userdata VALUES (''; DROP DATABASE userdata;'). Comme vous pouvez l'imaginer, ce n'est pas bon :si vous avez activé plusieurs déclarations, vous pouvez dire adieu à votre base de données. C'est ce qu'on appelle une injection SQL attaque. -
Lorsque vous envoyez votre variable à l'utilisateur, vous devez également remplacer correctement les caractères spéciaux HTML par des entités HTML. Heureusement, il existe une fonction pour faire cela aussi :htmlspecialchars() . Il transformera les caractères HTML spéciaux tels que
<à<.Cela semble être un problème souvent sous-estimé, mais en réalité c'est très grave. Imaginez si
$user_datacontient<script>SomeNastyScript()</script>. Il pourrait exploiter les vulnérabilités existantes dans le navigateur de vos utilisateurs, ou il pourrait envoyer un cookie non-HTTPOnly (qui peut contenir des mots de passe enregistrés) à l'attaquant, ou il pourrait inciter l'utilisateur à écrire son mot de passe sur un formulaire généré par la manipulation de le DOM (possible en javascript), ou plein d'autres mauvaises choses.Cela s'appelle XSS (Script intersite).
Version courte
-
Appelez
mysql_real_escape_stringsur la chaîne avant de l'insérer dans votre requête SQL (mais pas lorsque vousechoil). -
Appelez
htmlspecialcharssur la chaîne avant de l'afficher à l'utilisateur (mais pas lorsque vous la mettez dans la base de données).