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 :

htmlspecialchars ne fonctionne pas comme attendu


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut htmlspecialchars ne fonctionne pas comme attendu
    Bonjour,
    Dans le traitement d'un formulaire, j'ai la ligne suivante:$outData[$group][$key] = htmlspecialchars($entry, ENT_NOQUOTES); Mon but est dans une zone de texte de filtrer les entités html mais pas les apostrophes ou les guillemets doubles. Malheureusement le texte en entrée est filtré et les guillemets doubles comme les apostrophes sont remplacés.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Dans le traitement d'un formulaire, j'ai la ligne suivante:$outData[$group][$key] = htmlspecialchars($entry, ENT_NOQUOTES);
    Bizarre, généralement on utilise htmlspecialchars() à l'affichage *uniquement* et surtout pas en base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="email" value="<?= htmlspecialchars($email) ?>">
    ENT_NOQUOTES n'échappe pas " et ', et pour moi c'est bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo htmlspecialchars('&<>  \'  "', ENT_NOQUOTES); // => &amp;&lt;&gt;  '  "
    $entry contient probablement du HTML déjà échappé.

    Essaie de fournir un code permettant de reproduire la situation.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Mon but est de ne pas risquer d'entrer en base de données des entités html. J'ai remplacé le htmlspecialchars() par strip_tags(). N'ayant pas besoin de mise en forme, je pense que c'est bon.

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Mon but est de ne pas risquer d'entrer en base de données des entités html.
    Une entité HTML en est une uniquement dans un contexte HTML.
    htmlspecialchars() génère davantage d'entités HTML.
    strip_tags() dégrade la donnée.

    La base de données doit rester neutre. Pour le moment tout me laisse penser que tu ne règles pas ton problème correctement.

    Quelle est ta motivation ici ?

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    J'ai une fiche de renseignements sur des établissements. L'utilisateur peut entrer un commentaire dans une zone de texte. Ce commentaire est enregistré en base de données. La consultation de la fiche de renseignements, utilise le même formulaire avec la même zone de texte. Il paraîtrait bizarre de trouver des balises html dans ce texte, même si elles sont sans effet, d'où l'idée de les supprimer.

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Merci pour les précisions

    Il paraîtrait bizarre de trouver des balises html dans ce texte
    Le texte et ces éventuelles balises viennent de l'utilisateur ?
    Pourquoi supprimer la saisie (quelqu'en soit le motif) de ce qui ressemblerait à du HTML et pas aussi toutes les autres bizarreries ?
    C'est un peu comme si tu *supprimais* les mots/caractères pouvant provoquer des injections SQL.

    En plus strip_tags() a des limitations qui le rendent peu fiables :

    Avertissement
    Comme strip_tags() ne valide pas le HTML, les balises partielles ou rompues peuvent conduire à la suppression de plus de textes/données que désiré.
    Utilisation :

    Avertissement
    Cette fonction ne devrait pas être utilisé pour empêcher les attaques XSS. Utiliser des fonctions plus approprié comme htmlspecialchars() ou d'autres méthodes en fonction du contexte de la sortie.
    => https://www.php.net/strip-tags

    À mon sens, l'utilisateur saisit bien ce qu'il veut, et c'est à toi de traiter correctement sans dégradation de la data / de la saisie.

    Pour cela c'est simple :
    -- Tu échappes correctement la saisie dans la requête SQL => PDO::quote() / PDO::prepare()
    -- Tu échappes correctement la saisie à l'affichage HTML => htmlspecialchars()

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

Discussions similaires

  1. Méthode Every qui ne fonctionne pas comme attendu
    Par Cvanhove dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/01/2017, 10h30
  2. Réponses: 0
    Dernier message: 29/04/2015, 17h44
  3. [XL-2007] Comparaison de valeurs ne fonctionne pas comme attendu
    Par eric4459 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/05/2014, 18h55
  4. pthread et signal : fonctionne pas comme attendue
    Par contremaitre dans le forum POSIX
    Réponses: 0
    Dernier message: 01/08/2008, 13h22
  5. [D7][Mutex] ne fonctionne pas comme attendu !
    Par jbat dans le forum Delphi
    Réponses: 8
    Dernier message: 25/06/2007, 13h35

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