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 :

Sécuriser une variable à l'affichage


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 31
    Par défaut Sécuriser une variable à l'affichage
    Bonjour à toutes et à tous,

    Après avoir parcourus énormément de site et de forum, la réponse à ma question est toujours différentes suivant la communauté interrogé et j'ai donc décidé de poser directement ma question ici afin de trouver enfin une réponse clair et concise à mon problème ^^

    Mon projet est basé sur une architecture MVC. Donc d'une manière très simplifié voici comment je récupère et j'affiche les données de ma base de données.


    Formulaire :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='text' name='id_toto' />

    Controllers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_client = addslashes($_POST['id_toto'])
    Models :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function getInfoClient($id_client){
           $requete = $this->getDb()->prepare("
                SELECT *
                FROM client
                WHERE id = :id
            ");
           $requete->bindValue(':id', $id_client);
           $requete->execute();
           return $requete->fetch(PDO::FETCH_ASSOC);
    }
    Controllers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $donnees_client = getInfoClient($id_client)
    Donc ma variable $donnees contient la valeur de retour de ma fonction getInfoClient mentionné dans le model plus haut.

    Ensuite j'envoie ces données à ma vue.

    Vue :

    Voici les informations du client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $donnees; //Oui c'est un tableau je peux pas faire de echo mais c'est juste pour le principe de comprendre ^^
    Donc mon problème vient de mon echo $donnees.

    Dois-je faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    - echo $donnees
    - echo htmlentities(stripslashes($donnees), ENT_QUOTES, "UTF-8"); // Déjà essayé mais du coup au lieu de m'afficher les caractères proprement ça me met &45f; etc.... ^^ hôtel devient h&;4gtel par exemple
    - echo htmlspecialchar($donnees)
    Le fait de mettre addslashes lors de la recupération de mon formulaire est utile?
    Je me pose toutes ces questions car par exemple, si dans mon formulaire un mec met dans l'input => '<script>alert('Cool je fais une alerte en plein milieu de ta page')</script>' au lieu d'écrire son nom et que moi je fais un echo de tout ça, je vais avoir une jolie alert dans ma page...

    Voilà mon problème je ne sais pas trop où et à quel moment sécuriser tel ou tel choses.

    Merci beaucoup

  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
    Le addslashes() et stripslashes() ne sont pas utiles ici.
    htmlentities va convertir tout ce qui peut l'être. htmlspecialchars est suffisant et ne traite que les caractères ayant une signification en HTML.

    Le fait que les entités s'affichent tel quel sur ta page pourrait signifier que les données que tu affiches sont déjà converties, tu n'aurais pas un htmlentities au moment de l'insertion dans la base de données ?

    Si tu veux, tu peux utiliser striptags aussi pour nettoyer ta chaine.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Pour ajouter ce que dit Sabotage, le principe de base est de n'échapper les données qu'au tout dernier moment, et en fonction du contexte. La raison est qu'on échappe différemment un texte selon qu'il est destiné à être utilisé dans une base de données, affiché en tant que HTML, en tant que Javascript, etc ...

    Dans ton cas, lorsqu'on utilise une requête préparée, on n'a plus besoin d'échapper les données. À l'inverse, puisque tu sais que la valeur doit être un int, tu dois vérifier cette valeur en utilisant is_numeric, filter_var ou bindParam.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 31
    Par défaut
    En effet j'avais un htmlentities au moment de l'insertion en BDD merci

    Du coup je met juste un htmlspecialchars et pour le moment tout ce passe bien je vous remercie.

    Je reviendrais avec un autre post plus poussé si besoin

    Merci !

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

Discussions similaires

  1. Stockage commande grep dans une variable puis affichage
    Par Isabella83 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 23/04/2015, 12h13
  2. Réponses: 2
    Dernier message: 07/12/2011, 17h14
  3. Sécuriser une variable
    Par max33370 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/12/2009, 15h50
  4. [RegEx] Sécuriser une variable
    Par damien_dd dans le forum Langage
    Réponses: 5
    Dernier message: 26/10/2009, 16h12

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