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 :

Gestion ID / Navigation / Securite [PHP 5.6]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Par défaut Gestion ID / Navigation / Securite
    Messieurs Bonjour,

    Desole pour le titre mais honnetement, l'inspiration n'etait pas au rendez-vous.

    Voici mon souci.
    Je boss un site web qui est bien avance, mais la je reprend un point que j'avais laisse de cote.

    Le site contient une page php affichant une fiche article en fonction de l'ID de celui-ci.
    Les donnees sont stockees dans une base Mysql

    Au debut, je stockais cet ID a l'ouverture de la page dans une varriable $_SESSION['ACTUAL_ARTICLE_ID'], dans le but d'executer des requettes via un script du genre :
    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
     
    if (window.XMLHttpRequest) {
    				// code for IE7+, Firefox, Chrome, Opera, Safari
    				xmlhttp=new XMLHttpRequest();
    			  } else { // code for IE6, IE5
    				xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    			  }
    			  xmlhttp.onreadystatechange=function() {
    				if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    				  document.getElementById("article_content").innerHTML=xmlhttp.responseText;
    				}
    			  }
     
    			xmlhttp.open("POST","article.php",true);
    			xmlhttp.send();
    qui appel Article.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    ...
    $req_select = "SELECT * FROM ".$dbname.".Articles_table where id= ".$_SESSION['ACTUAL_ARTICLE_ID']."";
    ...
    ?>
    Le souci avec cela est que si j'ouvre dans un nouvel onglet un nouvel article, la variable $_SESSION['ACTUAL_ARTICLE_ID'] est reecrite, donc si je fais un refresh du premier onglet, le navigateur affiche alors l'article du nouvel onglet.

    J'espere que je me suis bien exprime.

    Donc pour palier temporairement et avancer sur mon dev, j'ai mis de coter la variable de $_SESSION et utilise un hidden input :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input id="article_id" type="hidden" name="article" value="xxxx" />
    que je passe en paramettre via jquery
    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
     
    			if (window.XMLHttpRequest) {
    				// code for IE7+, Firefox, Chrome, Opera, Safari
    				xmlhttp=new XMLHttpRequest();
    			  } else { // code for IE6, IE5
    				xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    			  }
    			  xmlhttp.onreadystatechange=function() {
    				if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    				  document.getElementById("article_content").innerHTML=xmlhttp.responseText;
    				}
    			  }
     
    			xmlhttp.open("POST","article.php?id="+$("#article_id").val(),true);
    			xmlhttp.send();
    Article.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    if(isset($_GET)){
    $id=mysql_real_escape_string($_GET["id"]);
    ...
    $req_select = "SELECT * FROM ".$dbname.".Articles_table where id= ".$id."";
    ...
    ?>
    Bon cela marche nickel, mais l'utilisateur peux changer l'id manuellement depuis le code source de la page et pour quelques raison qui sont pas utiles de develloper, sa me derange.

    Aurriez vous une solution, une idee pour pouvoir acceder et utiliser cet ID dans article.php autrement ?

    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
    Par défaut
    Il faudrait nous expliquer un peu plus : tu dis à la fois que le client ne doit pas modifier l'id mais que s'il ouvre un nouvel onglet cela doit être un id différent.

    S'il s'agit seulement du fait que le client ne doit pas avoir accès à d'autre id que ceux qui lui sont proposés, il faut vérifier à reception de l'id que celui fait bien partie des droits de l'utilisateur.
    Dans tous les cas si c'est le client qui choisit l'id, il peut le falsifier dés le départ s'il n'y a pas de contrôle côté serveur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Par défaut
    Salut Merci pour ta reponse.

    C'est bien se que je pensais, et comme tu le propose j'ai bien un controle cote serveur niveau droit.

    Ca me fais juste bizarre cette solution de hidden input pour stocker des donnees non sensibles mais utiles a l'exploitation du site.
    J'imaginais qu'il existe des choses plus verrouillées niveau client.

    En fait voici ce qui me derange, meme si c'est tire par les cheveux :
    Voici la structure basique du site


    -----------------------------------------------------------------------



    Blabla au sujet de l'article


    -----------------------------------------------------------------------

    Discution :
    Message 1
    Message 2
    ...

    Votre message : .......
    Envoyer
    -----------------------------------------------------------------------

    -La page affiche l'article "A1"
    - "A1" est stockee dans la hidden input
    - L'utilisateur change "A1" par "A2" dans la hidden input
    - L'utilisateur a bien les droit d'acceder et d'agir sur "A2"
    - L'utilisateur envoit un message depuis la zone prevue
    => via le script/php insere le nouveau message dans la bdd mais dans la table de "A2"

    Ma remarque est peu etre bete, vue que l'utilisateur aurait le droit d'aller sur la page de l'arcticle "A2" et rediger de la meme maniere son message.
    Mais moi sa me fais bisard que cela soit possible malgres tout.

    S'il y a un moyen d'empecher cela je suis preneur.
    Sinon je devrais essayer la relaxation

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 721
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 721
    Par défaut
    Citation Envoyé par The_macrafT Voir le message
    => via le script/php insere le nouveau message dans la bdd mais dans la table de "A2"
    c'est à cet endroit que tu dois tester si l'utilisateur connecté a le droit de modifier l'article A2

  5. #5
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Par défaut
    Merci la team

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

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