Tom's Guide > Forum > Programmation > [Débutant] Sécurité de vos applications PHP

[Débutant] Sécurité de vos applications PHP

Forum Programmation : [Débutant] Sécurité de vos applications PHP

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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

------------------------------ 20minutes.fr, l'information en continu.
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Bonjour,

Le mieux est d'encore passé le $_POST ou le $_GET dans plusieurs fonction genre:

$blabla = htmlspecialchars(mysql_real_escape_string($_POST['blabla']));

Tu as oublié de signaler que mysql_real_escape_string(); doit s'utiliser APRES une connexion à la base de données.


Message édité par Allstar27 le 25-12-2008 à 16:50:34
------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27

Pour htmlspecialchars(), l'inconvénient c'est que le comportement du code change. Il serait à classer dans les fonctions pour éviter les attaques XSS et non les injections SQL.

------------------------------ 20minutes.fr, l'information en continu.
Répondre à SiM07

Citation :

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.



bof, chacun sécurise ses appli comme il veut et a ses propres méthodes alors autant poster du code le plus simple possible et laisser l'autre se l'approprier.

C'est bien mais t'as oublié un élément de base important que sont les magic_quotes. Elles vont être désactivées sous PHP6 alors autant les désactiver dans le php.ini (quand vous mettrez votre version php à jour et si vous travailliez avec les magic_quotes par défaut, vous allez pleurez). Si vous avez pas accès à ce fichier, une fonction php (get_magic_quotes_gpc un truc comme ça) renvoit true si elles sont activées.


Message édité par hiola le 26-12-2008 à 19:39:23
------------------------------ On a autant d'enmerdes sous Linux que sous Windows mais on les a en passant pour un pro de l'informatique
Répondre à hiola

Hiola a dit :

Citation :

bof, chacun sécurise ses appli comme il veut et a ses propres méthodes alors autant poster du code le plus simple possible et laisser l'autre se l'approprier.



pour ma part j'apprécie énormément que des personnes m'alarment ou me guident.

Et pour avoir eu mon site piraté je trouve qu'il a bien raison de dire que la protection est du choix de chacun et que nul ne devrait dire du mal des autres ( de IE par exemple ! ) alors que la cause première est de soi-même !

pour la 'petite histoire' celui qui m'avait piraté :( était sous linux et firefox !!!

Bien sûr je garde le libre arbitre de mes actions ! Mais j'aime les informations qu'elles quelles soient et d'où qu'elles viennent.

c'est ainsi que je progresse, moi!
Salut :hello:

------------------------------ L'homme de l'Ouest
Répondre à jadu
Tom's Guide > Forum > Programmation > [Débutant] Sécurité de vos applications PHP
Aller à :

Il y a 266 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens