Journal Du Web

  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille
php

La sécurité des mots de passe dans PHP

E-mail Imprimer PDF

Tous les programmeurs sont un jour confrontés à l'enregistrement de mots de passe. Généralement, l'enregistrement se fait dans une base de données, mais il peut aussi se faire dans un fichier.

La première solution consiste à enregistrer tout simplement le mot de passe que l'utilisateur a entré. Celle-ci n'est pas la meilleure du point de vue de la sécurité. En effet, en cas d'intrusion dans la base de données, l'internaute malveillant va avoir accès directement aux codes.

La méthode utilisée est bien entendu le cryptage des informations. Pour cela, PHP possède une bibliothèque nommée MyCrypt « qui dispose d'une grande variété d'algorithmes de chiffrement, tels DES, TripleDES, Blowfish (par défaut), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 et GOST en modes CBC, OFB, CFB et ECB ».

Je vais vous présenter dans la limite de mes compétences la fonction crypt qui est un algorithme unidirectionnel. En plus clair, une fois cryptés, les caractères ne peuvent être décryptés ce qui augmente encore la sécurité.

Voici le descriptif de la fonction :

string crypt ( string $str [, string $salt ] )

Le premier mot string indique que la fonction renvoie une chaine de caractères (les données cryptées). A l'intérieur des parenthèses doivent se trouver les paramètres de la fonction.  Les crochets indiquent les paramètres facultatifs (ici : $salt).

Voici une application concrète :

<?php
echo crypt('Bonjour tout le monde', 3);
?>


La fonction nous renvoie « 3$T6rFc8t/UH6 ». Le chiffre 3 est le paramètre facultatif que l'on a vu juste avant ($salt). On le nomme le grain de sel. Vous pouvez entrer le chiffre que vous souhaitez. Il sert à améliorer le cryptage. De plus, la fonction crypt ne renvoie pas le même résultat pour une même chaine avec différents grains de sel.

Ce paramètre est facultatif. S'il est omis, il sera généré aléatoirement.

Ainsi, il convient d'enregistrer dans la base de données MySQL ou autre uniquement la chaine cryptée.
Je vous ai dit que le cryptage était unidirectionnel et que l'on ne pouvait pas faire un décryptage. Mais alors comment fait-on pour valider le mot de passe de l'internaute ? La solution est toute simple : il suffit de prendre le code de l'utilisateur, de le crypter et de le comparer à l'enregistrement crypté de la base de données en faisant attention d'utiliser le même grain sel.

Si vous n'avez pas spécifié de grain de sel, il va malgré tout falloir utiliser le même, pour cela, il faut forcer l'utilisation du même grain de sel avec le code suivant :

<?php
if (crypt($entree_utilisateur, $mot_de_passe) == $mot_de_passe) {
   echo 'Le mot de passe correct';
}
?>

 

Mis à jour ( Mercredi, 17 Septembre 2008 15:17 )
 

Traiter un formulaire php dans la même page

E-mail Imprimer PDF

À priori, il ne semble pas évident de traiter un formulaire avec php dans la même page. En effet, lors de l’exécution de celle-ci, il faut trouver un moyen pour que le code php se déclenche uniquement après la validation du formulaire.

En pratique, on préfèrera souvent créer deux pages uniques.

Malgré tout, cet obstacle peut facilement être surmonté grâce aux champs cachés.

Démonstration :

Le champ caché n’apparaitra pas, mais transmettra bien une valeur. C’est en vérifiant cette valeur que l’on sera si le formulaire a été validé grâce au bouton.

Code du fichier index.php

    <?php
        if (isset($_POST['champ']) && $_POST['champ'] == 'traitement') // Si le champ caché existe et qu'il vaut 'traitement'

        {
            echo '<p>Le formulaire a été cliqué</p>';
        }
        else
        {
            echo '<p>Le formulaire n\'a pas été cliqué</p>';
        }
    ?>

   <form method = "post" action = "index.php" >
    <input type = "text" name = "texte" />
    <input type = "submit" />
    <input type = "hidden" name = "champ" value = "traitement" /> // Le champ caché
   </form>

 

Voir aussi :

Vérifier la provenance de l'utilisateur

Mis à jour ( Vendredi, 12 Septembre 2008 09:54 )
 

Vérifier la provenance de l’utilisateur

E-mail Imprimer PDF

Ce petit tutoriel va vous permettre de vous assurer de la provenance de l’utilisateur. Je m’explique mieux : l’utilisateur correct passe par une page, entre des données ou lit tout simplement le contenu, puis clique sur un lien qui permet de passer à la page suivante.  

Nous allons nous assurer que l’utilisateur passe bien par la première page avant de visiter la deuxième. Cette technique peut être par exemple utile pour empêcher des petits futés d’accéder à la fin du formulaire sans avoir rempli les premières étapes. Mais d’autres utilisations peuvent être possibles, l’imagination est sans limite…

Nous avons deux fichiers :

Le premier fichier (index.php) contient le code suivant :

<form method = "post" action = "cible.php" >
    <input type = "text" name = "texte" />
    <input type = "hidden" name = "champ_cache" value = "traitement" />
    <input type = "submit" />
</form>

La ligne qui est intéressante est la suivante :

<input type = "hidden" name = "champ_cache" value = "traitement" />

On utilise en fait un champ caché (hidden) qui n’apparaitra pas à l’écran. Néanmoins, une variable sera transmise à la page cible.php. C’est en vérifiant la valeur de cette variable $_POST['champ_cache'] = 'traitement'; que l’on va pouvoir s’assurer que la première page a été exécutée.

La page cible.php contient le code suivant :

<?php
   
if (isset($_REQUEST['champ_cache']) && $_REQUEST['champ_cache'] == 'traitement')
   
{
       
echo '<p>Vient du formulaire</p>';
   
}
   
else
   
{
       
echo '<p>Ne vient pas du formulaire</p>';
   
}
 ?> 

C'est la première ligne qui nous intéresse, sa traduction littérale est la suivante :

Si la variable "champ_cache" est affectée et que sa valeur est "traitement", alors l'utilisateur vient bien de la page index.php.

Voilà, c'est terminé ! vous pouvez vérifier ce script en appelant directement la page cible.php :

 

On pourrait dans la même logique utiliser les variables de sessions : ($_SESSION['valeur']).

 

Mis à jour ( Mardi, 09 Septembre 2008 17:15 )
 

Créer un fichier de configuration en php

E-mail Imprimer PDF
 
En php, un fichier de configuration permet d’avoir à éviter de définir constamment certaines variables ou constantes. On s’en sert surtout pour définir les constantes de la base de données (serveur, nom d’utilisateur et mot de passe).
 
Il est fortement recommandé de créer ce fichier afin d’avoir à éviter de perdre du temps à modifier toutes les valeurs lorsque l’on change d’hébergeur. Les CMS comme Joomla et Drupal ont tous leurs fichiers de configuration.
 
Créez un fichier configuration.php
 
Entrez les informations sur la base de données :
 
<?php
$serveur = 'localhost';
$utilisateur = 'root' ;
$mot_de_passe = '2ksn9aj';
?>
 
Le fichier de configuration est terminé. On aurait pu utiliser les constantes, ce qui aurait d’ailleurs été plus logique :
 
define(SERVEUR, 'localhost') ;
 
Pour appeler ces variables, il suffit d’utiliser la fonction include() au bon endroit. Ainsi, dès que vous effectuez des opérations sur la base de données, vous tapez le code suivant :
 
<?php
include('configuration.php') ;
mysql_connect($serveur, $utilisateur, $mot_de_passe) ;
?>
 
Les variables $serveur, $utilisateur, $mot_de_passe sont maintenant accessibles sur la page et facilement utilisables pour la connexion à une base de données.
 
Mis à jour ( Mercredi, 03 Septembre 2008 19:22 )
 


Conception

Newsletter

Inscrivez-vous