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 :

[Système] la fonction mysql_escape_string


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut [Système] la fonction mysql_escape_string
    Bonjour,

    Lorsqu'on veut inséré un login dans la table, est-ce que un passage par mysql_escape_string est suffisant ? je parle au niveau de la sécurité.

    Parceque lorsque j'utilise cette fonction, et que j'insère par exemple un login du genre: <>pé/co, et que je regarde dans phpmyadmin, je vois le login tel qu'il est, donc je voudrai savoir savoir si c'est normal ?

    Ne vaudrai t-il pas mieux utiliser une autre fonction qui est htmlentities (ou quelquechose comme ca) pour transformer les caractères en html, c'est p'etre plus sûre ?


    Sinon pour le mot de passe, est-ce que un simple md5 pour hasher suffit ? Pas de risque d'un code malveillant ?


    merci d'avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    Salut,

    Si tes logins ont un masque le mieux est d'utiliser les expressions régulières. Personnellement j'utilise les expressions régulières (donc déjà normalement le problème est réglé puisque dans mes logins il n'y a que des lettres), mais en plus comme je suis parano j'ajoute mysql_real_escape_string et htmlentities.
    Et je vérifie aussi le nombre de caractères entrés, puisque mes pseudos doivent avoir entre 3 et 20 caractères.
    Donc là, le gars doit réussir son attaque en utilisant que des lettres, avec au maximum 20 caractères et en bonus il doit passer mysql_real_escape_string et htmlentities. Autant dire que je l'attend ailleurs.

    Pour htmlentities et mysql_real_escape_string, ces fonctions s'utilisent différement : la première c'est pour lutter contre les attaques xss (comme htmlspecialchars), la seconde c'est pour lutter contre les injections sql.

    Le top quand on peut, ça reste les expressions régulières, que quelqu'un me fouette si je me trompe.

  3. #3
    Membre confirmé Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    Salut, pourais-tu nous écrire le code pour mieux montrer la sintaxe exacte de ta procédure?

    Merci

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <form method="POST" action="inscription.php" />
    <div>
    <label>Login</label><input type="text" name="login" /> <br />
    <label>Pass</label><input type="password" name="pass" /> <br />
    <label>Retaper Pass</label><input type ="password" name="repass" /><br />
    <input type="submit" value="Confirmer" name="Confirmer"/> 
    </div>
    </form>
    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
    18
    19
    20
    21
    22
    23
    24
    <?php
    if (isset($_POST['Confirmer']) && $_POST['Confirmer'] == 'Confirmer')
    	{
    	if (!empty($_POST['login']) && !empty($_POST['pass']) && !empty($_POST['repass']))
    		{
    			if ($_POST['pass'] == $_POST['repass'])
    				{
     
    					$connection = mysql_connect('localhost', 'root', '');
    					mysql_select_db('test', $connection);
    					$req= 'SELECT count(*) FROM membre WHERE login="'.$_POST['login'].'"';
    					$res= mysql_query($req);
    						if (mysql_result($res,0) == 0)
    							{
    							mysql_query('INSERT INTO membre (id, login, pass) VALUES ("", "'.mysql_escape_string($_POST['login']).'", "'.md5($_POST['pass']).'")');
    							echo 'Vous venez de vous inscrire, bravo !';
    							}
    						else echo "Cette identifiant existe déjà";
    				}
    				else echo "Les deux mots de passe sont différentes";
    		}
    		else echo 'Vous devez rempli tous les champs';
    	}
    ?>


    J'ai vraiment fait un code des plus simples. Sinon je pense que je vais faire comme l'a dit plus haut, cad utiliser les expressions régulières.

    Si quelqu'un a un avis à apporter au niveau des failles dans mon code ou une amélioration etc.., n'hésitez pas.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    Avant de voir le code...
    else echo "Cette identifiant existe déjà";
    }
    else echo "Les deux mots de passe sont différentes";
    }
    else echo 'Vous devez rempli(?)tous les champs';
    }
    ?>
    Cela fait super des fautes comme ça, pour tes membres.
    J'espère que t'es pas français ou que t'étais très très fatigué mais sinon les profs sont vraiment minables.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut
    Citation Envoyé par JackBeauregard
    Avant de voir le code...

    Cela fait super des fautes comme ça, pour tes membres.
    J'espère que t'es pas français ou que t'étais très très fatigué mais sinon les profs sont vraiment minables.

    Non je n'ai pas encore de site utilisant du php. Je débute en php.

    Pour les fautes d'orthographes, disons que j'ai fait mon code à la va-vite.


    vg33:
    quand tu parles de données valides, c'est pour éviter que l'internaute ne saisisse un code malveillant ? Alors si j'ai bien compris, je devrai d'abord mettre $_POST['login'] dans une variable et passer cette variable dans des fonctions de "nettoyage" si puis dire tel que mysql_escape_string ?

    Mais moi j'ai utiliser mysql_escape.... au moment de l'insertion,c'est à dire ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query('INSERT INTO membre (id, login, pass) VALUES ("", "'.mysql_escape_string($_POST['login']).'", "'.md5($_POST['pass']).'")');

    Pour moi ce code veut dire qu'il va d'abord protéger les caractères (je ne sais pas du tout précisément comment) et ensuite injecter dans la table.
    Quelqu'un confirme ? Si oui, alors je ne comprend pas où est la faille.


    Concrètement, tu ne dois jamais utiliser les tableau POST, GET... en dehors de la phase de validation.
    La phase de validation concerne t-elle la requete d'insertion ? Ca veut qu'avant je ne dois pas utiliser de $_POST['login'] pour récupérer les valeurs des champs?
    C'est pas trop clair pour moi, dsl.

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Ta syntaxe me semble potentiellement dangereuse.
    A mon avis, tu ne devrais jamais utiliser de données utilisateur sans les avoir validées. Concrètement, tu ne dois jamais utiliser les tableau POST, GET... en dehors de la phase de validation.
    Exemple : tu valides successivement chaque POST (longueur, caractères...). S'il est valide, tu le stockes dans un autre tableau, $donneesValides, par exemple. Et c'est uniquement ce tableau $donneesValides que tu utilises par la suite. Comme ceci, tu es sûr de ne pas utiliser de données non validées.

Discussions similaires

  1. [Système] Probléme fonction exec
    Par locs dans le forum Langage
    Réponses: 2
    Dernier message: 21/08/2006, 15h57
  2. Réponses: 3
    Dernier message: 10/08/2006, 20h04
  3. [Système] problème fonction header
    Par Pfeffer dans le forum Langage
    Réponses: 1
    Dernier message: 21/06/2006, 11h16
  4. [Système] [debutant] Fonction include
    Par pierre50 dans le forum Langage
    Réponses: 7
    Dernier message: 01/06/2006, 19h00
  5. [Système] Pb fonction explode
    Par clairette dans le forum Langage
    Réponses: 3
    Dernier message: 17/05/2006, 15h40

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