Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1505 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  protection url $_GET

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

protection url $_GET

n°2317835
Eatop
Posté le 10-07-2018 à 00:38:05  profilanswer
 

Bonjour à tous,
 
J'ai une question au sujet de la protection des données transmises par URL.
Je tente de créer un site web avec une base membres. Dans ce site, il est possible pour les membres de créer un espace qui pourrait être accessible par les autres membres à l'aide d'un code unique (généré automatiquement lors de la création de cet espace et qui servira d'identification d'espace)... Je créé une page php dans laquelle chaque membre peut retrouver les espaces auxquels il a accès. En cliquant sur un des liens il aura alors accès à l'espace dédié (réalisé à l'aide d'un transfert de données via URL-> espace.php?code=<?php echo $donnees['code']) sauf qu'en modifiant l'url il est possible d'avoir accès à des espaces qu'il n'est pas censé pouvoir accéder. J'ai essayé de créer un bout de code (cf. ci-après) mais il est clair que je m'y prend très mal.
 
Je voudrait que : si ce membre modifie l'url qu'il ne puisse pas avoir accès aux autres espaces compte tenu qu'il n'est pas inscrit dans la BDD (table 'membres_espace').
 
Je comprends qu'il est nécessaire de:
 
1) vérifier si le code de l'url est valide -> si $_Get = code (table 'membres') et récupérer l'id de cette espace (si existant)
 
2) vérifier si l'id de la session est associé à l'id de l'espace (table 'membres_espace')
 
Malheureusement je n'arrive pas à mettre ça en forme dans mon code.
 
Dans une BDD, j'ai créé une table nommée espace qui se remplie à chaque création d'espace et contenant 5 colonnes :
 
Id
 
Code
 
Date
 
Nom
 
Créateur
 
Une autre table nommée membres avec les colonnes classiques : Id, pseudo, pass, ...
 
Et une table de liaison membres_espace regroupant id_espace et id_membres.
 
 

Code :
  1. <?php
  2.  
  3. ini_set('display_errors', '1');
  4. ini_set('error_reporting', E_ALL);
  5. session_start();
  6.  
  7. try
  8. {
  9.  
  10. $bdd = new PDO('mysql:host=localhost;dbname=membres;charset=utf8', 'root', 'root');
  11. $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  12.  
  13. }
  14. catch (PDOException $e)
  15. {
  16.    die('Erreur : '.$e->getMessage());
  17. }
  18.  
  19. if (isset($_SESSION['id']) AND $_SESSION['pseudo'])
  20. {
  21.    $getid=intval($_SESSION['id']);
  22.    $requser=$bdd->prepare('SELECT * FROM membres WHERE id = ?');
  23.    $requser->execute(array($getid));
  24.    $userinfo = $requser->fetch();
  25.  
  26. if (isset($_GET['cde']) AND $_GET['cde'])
  27. {
  28. $code=htmlspecialchars($_GET['code']);
  29. $recde=$bdd->prepare('SELECT * FROM membres, espace, membres_espace WHERE code = ? AND espace.id = id_espace AND '.$getid.' = id_membres');
  30. $recde->execute(array($code));
  31. $page = $recde->fetch();
  32.  
  33.  
  34.    }
  35.  else
  36.  {
  37.    header("Location: espace.php?id=".$_SESSION['id']);
  38.  }
  39.  }
  40.  
  41.    ?>


 
En vous remerciant

mood
Publicité
Posté le 10-07-2018 à 00:38:05  profilanswer
 

n°2317843
MaybeEijOr​Not
but someone at least
Posté le 10-07-2018 à 11:04:08  profilanswer
 

Bonjour,
 
Je dirai :
 
- une table pour les espaces : id_espace, lien_espace, cle_espace, nom_espace, date_espace, createur_espace
- une table pour les accès aux espaces : id_espace, id_membre
 
Sur la page où le membre retrouve les espaces auxquels il a accès tu fais une requête sur la table des accès aux espaces avec l'id du membre et tu récupères les id_espace liés à l'id_membre.
Une fois les id_espace récupérés tu récupères les lien_espace correspondant dans la table des espaces.
Le créateur de l'espace peut diffuser un lien contenant la clé, lorsque l'utilisateur clique sur le lien il a la possibilité de s'inscrire ou non à l'espace. Si le membre valide l'inscription tu recherches dans la table des espaces à quel id_espace correspond la clé puis tu ajoutes dans la table des accès aux espaces l'id_membre et l'id_espace correspondant à la clé.
Sur chaque page d'espace, tu vérifies ensuite dans la table d'accès aux espaces si l'id_membre existe pour l'id_espace.
 
Après, dans ce cas, n'importe quel membre qui récupères la clé peut s'inscrire. Tu peux ajouter un niveau de sécurité en invitant des membres directement plutôt que de faire une diffusion de clé.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2317872
Eatop
Posté le 10-07-2018 à 22:04:10  profilanswer
 

Bonjour MaybeEijOrNot  
C'est exactement ce dont je souhaite faire...
Je tâtonne depuis plusieurs jours, mais rien ne marche.

n°2317977
tompouss
Petit chat
Posté le 14-07-2018 à 00:07:44  profilanswer
 

attention, la fonction htmlspecialchars s'utilise en réalité lors de l'affichage des données en HTML.
 
Pour nettoyer des données avant utilisation avec une DB, il faut plutot utiliser des focntions de nettoyage (http://php.net/manual/fr/filter.filters.sanitize.php)
 
Une petite lecture indispensable:
https://www.phptherightway.com/#data_filtering
 


---------------
collectionneur de pâtes thermiques

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  protection url $_GET

 

Sujets relatifs
Get/Set Accesseur[Angular4] GET http://localhost:4200/app 404 (Not Found)
Protection du vol de caméraURL sans le GET
[Résolu][GTK]Utiliser la fonction Get_textThe '''Get_Line''' mystery
[JQUERY]Problème requête ajax en GET via PHP[Resolu]Get_line en début de programme
[Resolu]Basics: Get 
Plus de sujets relatifs à : protection url $_GET


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR