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

PHP & Base de données Discussion :

Sécurité en GET [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut Sécurité en GET
    Bonjour,

    J'ai un tableau HTML qui contient une liste de pays. Chaque ligne possède un lien afin d'éditer celui choisi comme ceci:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a class="edit_country grey" href="edit-country/68577" title="Edit"><span class="icon-pencil"></span></a>

    Je fais une réécriture via HTACCESS comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z\-]+)/([0-9]+)$ index.php?section=$1&country=$2
    Jusque là, tout va bien, mais si la personne change la valeur numérique du GET, soit il tombe sur un pays existant, soit il n'y a pas d'enregistrement correspondant et c'est pas très propre. J'ai essayé avec des sessions mais je n'y arrive pas.

    Voici un extrait de traitement de mes données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if($_SERVER['HTTP_REFERER'] != $address_back.'country-list'){
        $_SESSION['access_denied'] = true;
        header('Location: '.$address_back.'country-list');
    }else
        if($row_check_get -> m_get == 'edit' && isset($_GET['country']) && is_numeric($_GET['country'])){
        $sql_country = make_select('*', 'country', "c_id_group_country=".$_GET['country']."");
        $row_country = $sql_country -> fetch_object();
    }else{
        $_SESSION['error_country'] == true;
        header('Location: '.$address_back.'country-list');
    }
    En fait ce que je désire c'est que la valeur passée en GET ne soit pas modifiable. Si elle est modifiée, je renvoie sur la liste des pays.

    Quelqu'un pourrait m'aider?

    Merci d'avance,
    David

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    les sessions n'ont rien à voir avec ton problème.

    Pour être certain de l'existence du pays :
    tu dois juste récupérer la liste des pays (table ou fichier) sous forme de tableau et t'assurer que l'id existe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $id = (isset($_GET['country']) ? intval($_GET['country']) : false;
    if (($id === false) || ( ! isset($pays[$id]))
    {
        // id invalide
    }
    else
    {
        // édition du pays
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Merci pour la solution. Mais ce qui veux dire que l'utilsateur pourra toujours modifier la valeur en GET si il la connait. Et cela je ne désire pas.

    Merci de vos réponses

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Mais ce qui veux dire que l'utilsateur pourra toujours modifier la valeur en GET si il la connait. Et cela je ne désire pas.
    L'utilisateur pourra toujours soumettre la requête HTTP GET qu'il souhaite. A toi de traiter la requête comme tu le souhaites.
    Personnellement j'afficherais une page d'erreur ("Le pays a édité n'existe pas").

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    J'ai toujours du mal à comprendre. Quand tu dis
    En fait ce que je désire c'est que la valeur passée en GET ne soit pas modifiable. Si elle est modifiée, je renvoie sur la liste des pays.
    C'est pas possible dans la mesure où l'url peut être librement modifiée par le client, tu n'as absolument aucun contrôle dessus.

    Le seul moyen c'est crypter les id.
    Par exemple : tu mets dans ta page un lien pour modifier l'intitulé du pays id=45,
    pour être sûr qu'un petit malin n'a pas tapé au hasard un autre numéro, tu peux monter tes url en faisant en sorte que id=45 correspondent à (par exemple) id=a47drg58h6321.

    De ton côté à la réception, tu décryptes le "a47drg58h6321" de manière à bien récupérer id=45. Si le décryptage échoue, tu auras la certitude que l'url a été tapée directement ou modifiée manuellement.

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

Discussions similaires

  1. [MySQL] PHP methode GET sécurité
    Par nob92 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 14/10/2010, 15h37
  2. [Sécurité] Peut-on verrouiller les variables GET ?
    Par syl2095 dans le forum Langage
    Réponses: 19
    Dernier message: 10/06/2008, 20h08
  3. [Sécurité] Sécuriser les GET dans un formulaire
    Par s-c-a-r-a dans le forum Langage
    Réponses: 8
    Dernier message: 29/09/2007, 10h27
  4. [Sécurité] Passage de variable en GET
    Par meda dans le forum Langage
    Réponses: 10
    Dernier message: 01/03/2006, 14h31
  5. Réponses: 4
    Dernier message: 13/12/2005, 10h19

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