Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/11/2008, à 13:35

cycy88

Script PHP vérifiant que des champs sont passé dans l'url.

Bonjour à tous,

Je souhaiterais faire un script pour vérifier que des paramètres sont passés dans l'url...
Voici les paramètres :
ecole.php?id=3&vote=1000000&ECOLE=abcaeadfc31a5c43b2534bf995c0553f
donc les paramètres sont : id, vote, ECOLE...

Mon petit soucis c'est que je voudrais faire une condition vérifiant qu'ils ont passés cela dans l'url ecole.php?id=3&vote=1000000&ECOLE=abcaeadfc31a5c43b2534bf995c0553f ...
si c'est le cas, ils ont réussis...

Voilà pouvez-vous m'aider j'ai trouvé quelques fonctions urlencode, rawurlencode...?
Est-ce-que quelqu'un peut m'éclairer...
Merci

Hors ligne

#2 Le 24/11/2008, à 14:45

Zonyxt_

Re : Script PHP vérifiant que des champs sont passé dans l'url.

Bonjour,
Pour vérifier la présence des arguments tu peux utiliser cela :

<?php
if(isset($_GET['vote'])){
//l'argument vote existe
if($_GET['vote']=="1000000"){
//condition vérifiée
}
}
?>

Après je ne sais pas comme sont passés tes arguments soit avec la méthode post ou la méthode get.
Dans le cas de get pour récupérer les arguments en php c'est $_GET['nom_variable'] et si c'est en post  $_POST['nom_variable']

J'espère que cela t'as aidé.

#3 Le 24/11/2008, à 15:38

cycy88

Re : Script PHP vérifiant que des champs sont passé dans l'url.

est-ce-que tu peux m'aider j'arrive pas à faire afficher... mon message de réussite.

<?php
if(isset($_GET['id']))
{   
if($_GET['id']=="3")
{
if(isset($_GET['vote']))
{   
if($_GET['vote']=="")
{
if(isset($_GET['ECOLE']))
{   
if($_GET['ECOLE']=="abcaeadfc31a5c43b2534bf995c0553f")
{
    echo"<center><font color='green'>FELICITATION !!!</font></center>";
    {
        $connection=mysql_connect("localhost","root","mdp") or die ("erreur de connection au serveur");
        if ($connection)
                {
                    mysql_select_db('xxx') or die ("erreur de connexion &agrave; la base de donn&eacute;es");
                    $sql="SELECT mission5,id_utilisateur FROM utilisateurs WHERE id_utilisateur='$id_user'";
                    $result=mysql_query($sql);
                    while($data=mysql_fetch_array($result))
                    {
                        $m5=$data['mission5'];
                        if ((strcmp("$m5","1a")==0) or (strcmp("$m5","1")==0))
                        {
                            echo "<font color='red'>mais vous l&acute;avez d&eacute;ja fait</font><BR>";
                        }
                    }
               
                    //ON FAIT EN SORTE QUE LE DERNIER PSEUDO QUI A ACCOMPLI CETTE MISSION NE SERA PLUS LE DERNIER
                    $req0="UPDATE utilisateurs SET mission5='1' WHERE mission5='1a' ";
                    mysql_query($req0);
               
                    $resultat = mysql_query("SELECT * FROM utilisateurs WHERE id_utilisateur='$id_user'");
                    mysql_query("UPDATE utilisateurs SET mission5 ='1a' WHERE id_utilisateur='$id_user'");
                    $donnees = mysql_fetch_assoc($resultat);
                }
            }
}
        else
        {
            echo"<center><font color='red'>MAUVAISE REPONSE !!!</font></center>";
        }
}
}
}
}
}

?>

Hors ligne

#4 Le 24/11/2008, à 19:06

zonyxt

Re : Script PHP vérifiant que des champs sont passé dans l'url.

Alors j'ai regardé un peu et il est vrai que je ne te l'avais pas précisé mais tu peux tester plusieurs conditions dans un "if"
Voici par exemple ton script simplifié :

<?php
/*Verification de la présence des arguments*/
if(isset($_GET['id']) && isset($_GET['vote']) && isset($_GET['ECOLE'])){
    /*Test des conditions*/   
    if($_GET['id']=="3" && $_GET['vote']=="" && $_GET['ECOLE']=="abcaeadfc31a5c43b2534bf995c0553f"){
        echo"<center><font color='green'>FELICITATION !!!</font></center>";
        $connection=mysql_connect("localhost","root","mdp") or die ("erreur de connection au serveur");
        if ($connection){
            mysql_select_db('xxx') or die ("erreur de connexion &agrave; la base de donn&eacute;es");
            $sql="SELECT mission5,id_utilisateur FROM utilisateurs WHERE id_utilisateur='$id_user'";
            $result=mysql_query($sql);
            while($data=mysql_fetch_array($result)){
                $m5=$data['mission5'];
                if ((strcmp("$m5","1a")==0) or (strcmp("$m5","1")==0)){
                    echo "<font color='red'>mais vous l&acute;avez d&eacute;ja fait</font><BR>";
                }
            }
            //ON FAIT EN SORTE QUE LE DERNIER PSEUDO QUI A ACCOMPLI CETTE MISSION NE SERA PLUS LE DERNIER
            $req0="UPDATE utilisateurs SET mission5='1' WHERE mission5='1a' ";
            mysql_query($req0);
       
            $resultat = mysql_query("SELECT * FROM utilisateurs WHERE id_utilisateur='$id_user'");
            mysql_query("UPDATE utilisateurs SET mission5 ='1a' WHERE id_utilisateur='$id_user'");
            $donnees = mysql_fetch_assoc($resultat);
        }
            
    }
    else{
        echo"<center><font color='red'>MAUVAISE REPONSE !!!</font></center>";
    }
}

?>

J'ai testé le script et avec un appel à

 tonfichier.php?id=3&vote=&ECOLE=abcaeadfc31a5c43b2534bf995c0553f

ça devrait être bon.

Cependant quand tu postes un bout de code source, utilise la balise code c'est plus facile à lire wink

Dernière modification par zonyxt (Le 24/11/2008, à 19:06)

Hors ligne

#5 Le 25/11/2008, à 10:17

cycy88

Re : Script PHP vérifiant que des champs sont passé dans l'url.

ah oué ok merci ça marche zonyxt ...
mais en faites, j'ai envie qu'à la variable vote, l'utilisateur entre un chiffre quelque conque.
Peux-tu m'indiquer comment dois-je faire ?

Merci d'avance

Hors ligne

#6 Le 25/11/2008, à 15:45

nicolas66

Re : Script PHP vérifiant que des champs sont passé dans l'url.

Suffit de tester le contenu de la variable `vote' avec une expression régulière. Va voir du côté de `ereg'.


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#7 Le 25/11/2008, à 21:45

Tycho Brahe

Re : Script PHP vérifiant que des champs sont passé dans l'url.

Salut,

Je me permet quelques petites remarques :
- isset() est ici inadapté, passer une variable vide reviendrais a un test vrai. Il faut ici préférer l'usage de empty() (avec un non logique ! devant pour obtenir son contraire).
- une regex mange énormément de ressources, il est préférable de ne les utiliser que lorsqu'elles sont réellement nécessaires. Si tu attend un entier par exemple, utilise donc le intval() de ce que l'on te donne, comme ça si on te passe n'importe quoi ce sera converti en entier.
- Passer l'id du votant par GET (de même pour POST) est un extrêmement mauvaise idée, ça laisse ici au moins 2 types d'attaques possibles : modification directe de l'url pour voter pour quelqu'un d'autre et injection de sql.
- Si dans ta table le champ id_utilisateur n'a que des valeurs uniques, de là naissent deux remarques : utilise un LIMIT 1 dans ta requête afin d'améliorer les performances et éviter d'éventuelles erreurs, et supprime ton while lors de la récupération des données vu qu'il ne sert a rien.
- La sélection du champ id_utilisateur ne sert a rien vu que tu ne t'en sert pas.
- Le HTML devrais être entièrement refait en respectant la syntaxe et la sémantique du XHTML, enfin sur ce point je devine que tout le site devrais être refait.
- Mélanger le php et le (x)html n'est pas ce qu'il y a de plus recommandé, ça devient très vite complètement ingérable et bordélique a souhait (d'ailleurs c'est déjà le cas). Pour ma part je recommande grandement l'usage de templates.


Bon, je n'ai pas tout regardé en détail, mais ceci est un début pour faire quelque chose de plus "propre". J'avoue ne pas avoir toujours tout compris dans le but final recherché, j'espère ne pas avoir eu une fausse interprétation. N'hésite pas a poster les mises a jour de ton code si tu veux d'autres remarques, que j'espère tu trouvera utiles et constructives.


Loi de Newton :
Si tu restes à glander sous le pommier, tu pourrais bien prendre une pomme sur la gueule.

Hors ligne

#8 Le 26/11/2008, à 16:44

cycy88

Re : Script PHP vérifiant que des champs sont passé dans l'url.

tout les remarques que tu as fais, elles sont bonnes et vraies, l'objectif c'est que je réalise un site web permettant d'expliquer les failles de sécurité web...

puis bien entendu, les champs id etc, ne sont pas crée c'est fictif ... c'est juste que la personne réussise la mission, lui faire comprendre...

puis tes remarques sur le mélange, XHTML, je suis également d'accord.

Hors ligne

#9 Le 27/11/2008, à 22:15

Tycho Brahe

Re : Script PHP vérifiant que des champs sont passé dans l'url.

Bzh a écrit :

Je me permet de te diriger vers cet article.
http://ingenierie.autardprod.fr/article … urite.html
Il s'agit d'un article sur la gestion de la sécurité des chaines de caractères avec PHP.

... sauf que cet "article" est du grand n'importe quoi. Le type qui a écrit ça est visiblement un grand débutant dans le domaine.

Quelques petites remarques a ce sujet :

"Le seul véritable danger d'enregistrer des caractères est les injections de SQL lors de la création de la requete pour la base de données."
-> Alors on commence très fort, l'injection de SQL est un des dangers qui guettent le développeur, mais ce n'est pas le seul du tout ... absolument TOUT ce qu'entre un utilisateur doit être vérifié par une méthode appropriée à la situation. Je prendrais en exemple, et c'est loin d'être le seul, l'ouverture d'un fichier dont le nom est passé en par GET ou POST pour en afficher des données : il serait aisé de modifier le nom afin d'afficher le contenu du script php, révélant donc tout le code, y compris d'éventuels identifiants de connexion à une base de données (par exemple).
-> Au passage, visiblement lui et moi n'avons pas la même interprétation de que signifie "enregistrer". Lorsque le script s'exécute, les variables sont stockées en mémoire puis sont libérées à la fin, je vois mal où est ce que l'on trouve un "enregistrement", c'est plutôt un stockage temporaire. Le terme enregistrement fait plus référence a la sauvegarde de la donnée sur un support d'où on pourra le retrouver après la fin du script, et ce n'est certainement pas dans la ram (et pourquoi pas dans un registre du processeur tant qu'on y est ?).

"La seul solution FIABLE est de passer par la fonction prévue à cet effet : mysql_real_escape_string()"
-> On continue dans le faux, dans certains cas il est possible de réaliser certaines injections de SQL malgré l'utilisation de mysql_real_escape_string(). D'ailleurs suite a ça je me suis amusé a trouver quelques exemple, c'est assez fun tongue


Bref, question "TOUTE sécurité" on repassera ... Par curiosité j'ai parcouru quelques articles proposés sur ce site, c'est vraiment toujours aussi naïf et incomplet.

Remarque bête et méchante au sujet de ce que j'ai lu dans la section "A propos" de ce site :
"Nous essayons de proposer un contenu sérieux..."
-> visiblement c'est pas gagné ...


Loi de Newton :
Si tu restes à glander sous le pommier, tu pourrais bien prendre une pomme sur la gueule.

Hors ligne