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_data
contient<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_string
sur la chaîne avant de l'insérer dans votre requête SQL (mais pas lorsque vousecho
il). -
Appelez
htmlspecialchars
sur la chaîne avant de l'afficher à l'utilisateur (mais pas lorsque vous la mettez dans la base de données).