Plus je lis le forum, plus je lis des portions de code et plus, moi, développeur PHP junior (mais plus confirmé que beaucoup ici), je me sens obligé de vous alertez.
Vous crachez sur IE car il n'est pas sécurisé ? avez vous vérifié vos sites web ?
PHP est très facile à prendre en main, mais si il y a une chose à toujours faire attention, c'est d'ajouter un minimum de sécurité. Vous trouverez d'excellent sites sur la sécurité en PHP via Google, cependant voici quelques trucs à ne JAMAIS oublier.
Stockage des mots de passe
Jamais vous ne devez stocké en "clair" les mots de passe de vos membres dans votre base de donnée. Il existe pour cela des fonctions de hachage : md5(), sha1() ... Voici comment les faire fonctionner.
A l'inscription l'utilisateur entre un mot de passe. Je récupère son mot de passe en clair dans $_POST['password_inscription']. Premier réflexe, md5 ! $password_for_db = md5($_POST['password_inscription']); $password_for_db contient maintenant une chaine de 32 caractères et il est impossible de revenir en arrière, d'avoir $_POST['password'] avec $password_for_db !
Mais on fait comment après pour connecter le membre ?
Pour connecter le membre rien de plus simple, même réflexe. $password_for_check = md5($_POST['password_connexion']); Si $password_for_check == $password_for_db alors le mot de passe saisi est correct.
Vous pouvez explorer votre base de donnée, vous n'allez jamais voir le mot de passe de vos membres.
Démo (PHP est utilisé en ligne de commande ici, mais sur une page web le fonctionnement est 100% identique) :
Citation :
simon@lucie:/tmp$ cat demo.php
<?php
$motdepasse1 = "toto";
$motdepasse2 = "tata";
$motdepasse3 = "toto";
echo md5($motdepasse1)."\n";
echo md5($motdepasse2)."\n";
echo md5($motdepasse3)."\n";
?>
simon@lucie:/tmp$ php -f demo.php
f71dbe52628a3f83a77ab494817525c6
49d02d55ad10973b7b9d0dc9eba7fdf0
f71dbe52628a3f83a77ab494817525c6
simon@lucie:/tmp$
Injection SQL
L'injection SQL, est ce que je recontre le plus sur le forum, c'est aussi et de loin l'erreur la plus grave et la plus dangereuse.
Il ne faut jamais, jamais mettre directement les variables $_POST ou $_GET dans vos requêtes SQL. Si une valeur doit être un nombre, vérifié que vous avez bien un nombre avec
is_numeric(), si le résultat est faux, arrêter l'exécution du programme. Dans le cas des texte, le problème bien des apostrophes, il est possible de totalement détourner une requête pour lui faire dire n'importe quoi si vous ne vous protégez pas.
Avant de mettre de mettre des variables veuillez donc, pour les variables qui doivent être des nombres à le vérifier avec is_numeric() et pour les champs texte à les passer avec la fonction
mysql_real_escape_string().
Pour voir les dégâts d'une injection SQL, une petite recherche sur Google et vous verrez de très très nombreux exemple.
Document écrit par
SiM07 et disponible sous licence
Creative Commons by-nc