Cacher son id dans un url

Par regisDevweb, il y a 9 ans


Bonjour,
Je suis debutant en PHP et je veut cacher mon id, quand l'utilisateur clique sur l'url en gros que quand l'utilisateur clique sur le lien que sa fasse idResto =djdsjsglgmtp par exemple au leu de idResto = 1

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

<a href='unSeulRestaurant.php?idResto=".$lesrestaurants['idResto']."'><h1>".$lesrestaurants['nomResto']."</h1></a>"

Ce que je veux

idResto = sjjrut&opsk

Ce que j'obtiens

aucune erreur mais juste idResto = 1, 2 , 3 ou 4, selon l'article qu'on choisit

15 réponses

Kenor, il y a 9 ans

Tu te créé une fonction d'encryptage / décryptage.

Quand tu veux envoyer l'id, tu encryptes encrypt($lesrestaurants['idResto']), quand tu veux recevoir tu décryptes $monVraiId = decrypt($_GET['idResto']);.

A toi de choisir le système d'encryptage que tu souhaites (il en existe de nombreux, des plus ou moins sécurisés, et des plus ou moins compliqués à utiliser).

Si ça doit être sécurisé, je te conseil d'utiliser des class toute faites (sur Github, tu devrais en trouver des suffisamments tester pour être utilisable sans risque).

regisDevweb, il y a 9 ans

Ok, mais la fonction encrypt/decrypt va être composé comment, je ne voie pas se qu'il faut mettre à l'intérieure (désolé mais je n'ai jamais fais ça)

betaWeb, il y a 9 ans

Salut,

Tu peux crypter l'URL avec la fonction PHP urlencode() (http://php.net/manual/en/function.urlencode.php) et les décoder au besoin avec la fonction urldecode() (http://php.net/manual/en/function.urldecode.php).

Sinon, si tu vexu crypter certains paramètres passés en GET, tu peux faire comme ceci :

// Fonctions encrypt / decrypt (à mettre dans un fichier helper inclu globalement par ex.) function simple_encrypt($text, $salt = "xx2Bda3wW9aZ3c4PXG2PeB9") { return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); } function simple_decrypt($text, $salt = "xx2Bda3wW9aZ3c4PXG2PeB9") { return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); } // On encode l'ID <a href="unSeulRestaurant.php?idResto=<?= simple_encrypt($lesrestaurants['idResto']) ?>"><?= $lesrestaurants['nomResto'] ?></a> // Pour décoder l'ID $idResto = simple_decrypt($_GET['idResto']);
regisDevweb, il y a 9 ans

merçis à tous je vais me débrouillier avec ce que vous m'avez passer ^^

Kenor, il y a 9 ans

Attention, je n'ai volontairement pas parlé de la façon la plus connu de crypté en PHP (mcrypt) car elle n'est plus maintenu depuis 2007 et l'extension n'est plus installé par défaut depuis PHP 7.

D'où le conseil d'utiliser une class maintenu via Github, qui sera plus sécurisé.

Evidemment, ça dépend de l'utilisation qu'on en a :)

regisDevweb, il y a 9 ans

ok ça marche :) mercis

Kenor, il y a 9 ans

Ah bah, ils viennent d'annoncer qu'elle sera carrement supprimé des extensions possibles dans la version 7.2 de PHP (suite à l'annonce de la sortie de la version 7.1). Bref, il est préférable de s'en passer.

regisDevweb, il y a 9 ans

ah ok il y a pas une autre solution alors?

betaWeb, il y a 9 ans

Oui, tu trouvera pleins de ressources sur le net et des exemples de fonctions d'encodage/décodage ;)
Suffit de chercher un peu :)

regisDevweb, il y a 9 ans

je pense que je vaire ça sinon ça va m'embrouillier l'esprit ^^

regisDevweb, il y a 9 ans

je vais essayer de comprendre urlencode et urldecode pour l'appliquer dans ma structure MVC ^^

Kenor, il y a 9 ans

Euh, oué, alors urlencode ne crypte rien, il permet de passer un argument dans une url qui restera valide.
En l'occurrence, pour un chiffre tel que 10, le retour sera toujours 10.

Tu peux tester par toi même : http://meyerweb.com/eric/tools/dencoder/

regisDevweb, il y a 9 ans

ah oui c'est pour une chaine de caractere effectivement bon je vais essayer openSSL alors

regisDevweb, il y a 9 ans

j'ai trouvé une solution qui est

Modele.php

public function encrypt($chaine, $key="", $urlvalid=true) //methode pour encrypter une valeur { if ($urlvalid) { $ret = strtr($ret, array( '+' => '.', '=' => '-', '/' => '~')); } return $ret; } public function decrypt($chaine, $key="") //methode pour decrypter une valeur { $chaine = strtr( $chaine, array( '.' => '+', '-' => '=', '~' => '/')); return $chaine; }

Controleur.php :

public function cryptageid($chaine, $key="", $urlvalid=true) { $this->ModeleAffichage-> encrypt($chaine, $key="", $urlvalid=true); $user_id = strtr($ret ,array('+' => '.', '=' => '-', '/' => '~')); $ret = urlencode($user_id); return $ret; } public function decryptageid($chaine, $key="") { $user_id = strtr($chaine ,array('+' => '.', '=' => '-', '/' => '~')); $chaine = urldecode($user_id); $this->ModeleAffichage-> encrypt($chaine, $key=""); return $chaine; }

mais je voie pas comment l'intégrer dans ma vue pour l'id ou il y a :

<a href='unSeulRestaurant.php?idResto=".$lesrestaurants['idResto']."'><h1>".$lesrestaurants['nomResto']."</h1></a>".