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 :

Faille SQL paramètres url


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut Faille SQL paramètres url
    Bonjour,

    Je suis en train de développer un site web et un ami m'a dit que sur toutes les pages où je passe un paramètre via l'url il a réussit à accéder à la base de données.
    Pour le système de news je faisais un truc du genre abcabc.fr?id=6 puis je contrôle si le paramètre après "id" est un nombre, si c'est vrai alors je continu d'exécuter le code.

    Voici le code en lui même :

    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
    <?php
    include ("q4s65v21vfdf6ve89rf85.php");
    mysql_query("SET NAMES UTF8");
     
    if (is_numeric($_GET['id'])) // sécurité qui contrôle le paramètre présent dans l'url, si c'est pas un nombre rien ne s'affiche
    {
        $id = '';
        $good = true;
        $id = $_GET['id'];
    } else {
        $good = false;
    }
     
    if ($good == true) {
        try {
    // si $good est à true, l'id est un nombre, donc je continu pour afficher la news
    Ensuite dans la requête je fais .... WHERE id = :ID;
    Et j'ajoute un paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req->bindParam(':ID', $id, PDO::PARAM_STR, 4);
    Je pensais que le fait de contrôle si c'est un nombre me protégera mais visiblement ce n'est pas le cas.

    Pouvez vous m'aider ?
    Merci d'avance

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Dans ton cas is_numeric n'est pas suffisant car par exemple l'url abcabc.fr?id=0x539 sera considéré comme numerique. is_int() serait déjà plus judicieux.

    De plus tu donnes un entier donc , autant le binder comme tel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req->bindParam(':ID', $id, PDO::PARAM_INT);
    Ceci dit avec donc code précédent je suis pas convaincu qu'il y'est réellement une injection possible du fait de la requête préparée.
    Faudrait qu'il t'explique ce qu'il entend par "accéder à la base de données"
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    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
    Par défaut
    Moi je dirais plutôt que is_numeric ou is_int sont inutiles.
    Si l'utilisateur saisit n'importe quoi, il n'y aura pas de résultats à la requête, c'est tout.

    Ce qu'a voulu dire la personne ca ne serait pas plutôt qu'on peut saisir n'importe quel id ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut
    Non, il avait dit qu'il a carrément put accéder à la base de données et voir son contenu. J'utilise toujours des requêtes préparées c'est bizarre je trouve.
    D'après lui ça provient du paramètre de l'url mais peut être que non ...

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Faut que tu le vois faire , parce que avec ce que tu nous donnes comme code c'est pas possible.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Citation Envoyé par encoremoi21258 Voir le message
    Non, il avait dit qu'il a carrément put accéder à la base de données et voir son contenu. J'utilise toujours des requêtes préparées c'est bizarre je trouve.
    D'après lui ça provient du paramètre de l'url mais peut être que non ...
    A moins que tu n'aie fait autre chose avant ou après... Mais avec le code que tu as donné une injection n'est pas possible. Si quelqu'un a pu accéder à ta base de données (déjà il doit te le prouver) c'est surement par un autre moyen.

  7. #7
    Modérateur
    Avatar de BakSh0
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 276
    Par défaut
    Bonjour,

    Citation Envoyé par encoremoi21258 Voir le message
    il avait dit qu'il a carrément put accéder à la base de données et voir son contenu
    Bah demande lui directement non ?
    BakSh0, Modérateur .Net & Web

    Affichez la colorisation syntaxique dans votre code en ajoutant dans votre balise : [CODE=xxx] en remplaçant xxx par le nom du langage.


    N'oubliez pas de consulter les FAQs : .Net / Web et les cours et tutoriels .Net / Web

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 71
    Par défaut
    Hello,

    Tu peux regarder dans tes logos Apache brut (si tu y a accès bien-sur)
    Tu devrais voir :

    ?id=XXXXXXXXX

    Cela te dira comment il l'a fait, s'il l'a vraiment fait.

    Pablo

  9. #9
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut
    Bonsoir,

    Après j'ai fais ceci :

    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
    if ($good == true) {
        try {
            $req = $pdo->prepare('SELECT Titre, Contenu, Affiche FROM News WHERE Id = :ID;');
            $req->bindParam(':ID', $id, PDO::PARAM_STR, 4);
            $req->execute();
            $arrAll1 = $req->fetchALL();
        } catch (PDOException $Exception) {
     
        }
        echo "<br/>";
        if ($arrAll1[0][2] == 1) {
            echo '<div class="titre_new">';
            echo securiserChaineCaracteres($arrAll1[0][0]);
            echo '</div><div class="contenu_new">';
            echo $arrAll1[0][1];
            echo '</div>';
            echo '<br/><br/>';
            $req->closeCursor();
            $req = NULL;
            echo "<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>";
        } else
            echo "<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><div class='message_action_anormale'>Mais qu'est ce que t'essayes de faire ?!</div><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>";
    } else
        echo "<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><div class='message_action_anormale'>Mais qu'est ce que t'essayes de faire ?!</div><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>";

  10. #10
    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
    Par défaut
    Je ne vois pas en quoi ton code reponds à toutes les questions qu'on ta posé.

    Par contre tes <br/> a répétition ce n'est pas sérieux. Il faut utiliser les marges CSS par exemple.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut
    Bonsoir,

    Désolé pour la réponse incomplète j'étais pressé comme ce soir d'ailleurs, je n'ai plus beaucoup de temps libre.

    @pablofr :
    Je ne vois rien de spécial dans les logs. Je lui demanderais prochainement de le refaire et je regarderais les logs à ce moment là. En faite je ne sais plus quel jour c'était.

    @sabotage :
    Concernant les <br/> effectivement, il faut que j'améliore cela.

    @BakSh0 :
    Il m'a dit qu'il a utilisé un logiciel, je pense que c'est le genre de choses dont on ne peut pas parler ici. En tout cas il a l'air de pas vraiment savoir comment ça marche. Peut être que le logiciel essaye plein de failles parmi les plus courantes et qu'il y en a une qui a fonctionné sur le site.

    En faite on a décidé de prendre un autre système de news mais la présence d'une faille SQL me gêne quand même un peu car peut être que je l'ai faite encore ailleurs.

  12. #12
    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
    Par défaut
    Il existe des logiciels qui detectent des failles sur des sites webs sans malveillance, au moins ils te diront precisemment ou est le problème.
    Mais si ton ami et son logiciel ne peuvent pas te dire ou est la faille, pourquoi t'orientes-tu vers cette partie du code ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut
    Bonjour,

    Il m'a dit qu'à partir de la page qui sert à voir les news en entier (celle dont j'ai donné le code dans un de mes messages) il y a une faille qui lui a permis d'accéder à la base de données.

    Pouvez vous me donner le nom de quelques uns de ces logiciels si possible ?
    Bien sûr sans cheval de troie et autres trucs de ce genre qu'on trouve défois dans des logiciels de ce type.

Discussions similaires

  1. [VBA][SQL] Paramètre manquant (ce qui est faux)
    Par CinErarY dans le forum Access
    Réponses: 4
    Dernier message: 24/12/2006, 17h10
  2. tag html link et passage de paramètre à url.
    Par david06600 dans le forum Struts 1
    Réponses: 1
    Dernier message: 22/08/2006, 14h22
  3. Failles SQL Server ?
    Par Baptiste Wicht dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/06/2006, 08h50
  4. [Débutant] Dbexpress / Trace SQL / Paramêtres absents
    Par pitango dans le forum Bases de données
    Réponses: 5
    Dernier message: 02/06/2006, 23h22
  5. [Javascript] Paramètre url
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/04/2006, 15h57

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