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


betaWeb
Réponse acceptée

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']);

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).

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)

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

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 :)

ok ça marche :) mercis

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.

ah ok il y a pas une autre solution alors?

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

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

J'utilise cette library en ce qui me concerne : https://github.com/defuse/php-encryption
enfin, un fork perso de cette library (elle ne répondait pas totalement à mes besoins).

Après, ils conseillent OpenSSL à la place, et donc je suppose :
http://php.net/manual/fr/function.openssl-encrypt.php
http://php.net/manual/fr/function.openssl-decrypt.php

Mais là, je ne connais pas, donc je ne peux pas te renseigner plus que ça.

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

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/

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

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>".