IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Besoin de mysql_real_escape_string à chaque fois ?


Sujet :

Langage PHP

  1. #1
    skurty
    Invité(e)
    Par défaut Besoin de mysql_real_escape_string à chaque fois ?
    Bonjour,

    j'ai un site avec une partie réservée à des membres et je souhaite la sécuriser au maximum mais je me pose une question quant aux sessions.

    J'aimerai savoir si un hacker/pirate pouvait modifier les sessions. Si c'est éventuellement possible, il faut que j'utilise mysql_real_escape_string à chaque fois que je veux faire une requête pour éviter les injections sql mais si c'est impossible, c'est inutile.

    Donc quel est le meilleur moyen pour avoir des sessions sécurisées :
    - enregistrer le login avec mysql_real_escape_string et le mot de passe en sha1 et utiliser mysql_real_escape_string à chaque requête
    - ou uniquement enregistrer ces deux informations mais sans utiliser mysql_real_escape_string à chaque fois ?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    les injections SQL, le hashage SHA1 et les sessions PHP sont 3 choses complétement différentes.

    Concernant les sessions, on peut raisonnablement dire qu'il n'est pas possible de modifier une session de l'exterieur.
    Il est possible de voler une session existante mais c'est un autre sujet.

    Concernant les injections SQL, il faut protéger toute les chaines et toutes les données provenant d'une source extérieure.
    Si tu places en session, la donnée saisie par l'utilisateur dans un formulaire, il faut évidemment la protéger avant de l'utiliser dans une requête.

  3. #3
    skurty
    Invité(e)
    Par défaut
    Merci pour ta réponse.

    Voici ce que je fais actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $login=mysql_real_escape_string($_POST['login']);
    $pass=sha1($_POST['pass']);
     
    $query="SELECT no_utilisateur FROM utilisateurs WHERE nom_utilisateur='$login' AND pass='$pass'";
    $req=mysql_query($query);
     
    if (mysql_num_rows($req)>0) {
        $tab=mysql_fetch_assoc($req);
        $_SESSION['utilisateur']=array(
    	'no'=>$tab['no_utilisateur'],
    	'nom'=>$login,
    	'pass'=>$pass
        );
    }
    else {
        // erreur, utilisateur inconnu
    }
    De cette manière il ne me semble pas qu'il y ait de problème au niveau sécurité.

    Donc dans la partie membre, je peux directement utiliser $_SESSION['utilisateur']['no'] ou $_SESSION['utilisateur']['nom'] sans risquer d'injection sql ?

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query='SELECT date_inscription FROM utilisateurs WHERE no_util='.$_SESSION['utilisateur']['no'];
    Merci de me dire si c'est correct au niveau sécurité ou si vous avez des conseils.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tout chaine doit $etre protégée puisque susceptible de contenir un guillemet

  5. #5
    skurty
    Invité(e)
    Par défaut
    Donc d'après ce que tu me dis, il faudrait que je fasse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query='SELECT date_inscription FROM utilisateurs WHERE no_util='.mysql_real_escape_string($_SESSION['utilisateur']['no']);
    quand même ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si "no" est un id numérique, non.
    Ce sont les chaines qui posent problème.

  7. #7
    skurty
    Invité(e)
    Par défaut
    Oui, no est un entier.

    Mais pour le login vu que je l'enregistre en session avec mysql_real_escape_string() et qu'il n'est pas possible que quelqu'un la modifie, je n'ai pas besoin d'utiliser à chaque fois la fonction contre les injections sql ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est une erreur de le stocker apres mysql_real_escape_string().
    Démonstration avec le login : l'arbre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $login=mysql_real_escape_string($_POST['login']);
     
      $_SESSION['utilisateur']=array(
    	'no'=>$tab['no_utilisateur'],
    	'nom'=>$login,
    	'pass'=>$pass
        );
    echo 'Bonjour ' . $login . ' vous êtes bien connecté';
    // Bonjour l\'arbre vous êtes bien connecté

  9. #9
    skurty
    Invité(e)
    Par défaut
    Ha je n'avais pas pensé à cela...

    J'ai compris maintenant où j'avais tort, je te remercie pour ton aide et tes réponses rapides

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/05/2006, 17h27
  2. le makefile refait tout à chaque fois?!
    Par jula dans le forum Systèmes de compilation
    Réponses: 2
    Dernier message: 25/04/2006, 17h08
  3. [Cookies] L'ID de session change à chaque fois ! :-(
    Par seb92500 dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2006, 12h38
  4. [C#]Authentification qui échoue : a chaque fois "Login inco
    Par The_revival dans le forum ASP.NET
    Réponses: 3
    Dernier message: 15/04/2006, 22h36
  5. ShellExecuteEx ne s'execute pas à chaque fois??
    Par Gothico dans le forum MFC
    Réponses: 11
    Dernier message: 01/03/2005, 22h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo