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 :

preg_replace sur les commentaires


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Par défaut preg_replace sur les commentaires
    Je ne sais pas si ça vaux le coup de "limité" les caractères poster par un utilisateur (pour la sécurité et/ou la propreté). Si oui auriez-vous une fonction interesante (j'utilise le latin1) ?

    L'idée que j'ai c'est de supprimer tout caractère non disponible dans un clavier français avec un preg_replace (exemple : "/[^a-z0-9_ \t\r\n\v\f!@€éèçàù]/i"), mais au préalable de changer un grand bon nombre de caractère accentuer non disponible dans la langue de molière en caractère sans accents. De supprimer tous les doubles espaces triples, quadruples... sauts de ligne.


    Ça comprend également la ponctuation seulement celle francais. Qu'en dites-vous ? à vus d'oeil je dirais que ca gênerais 1% des utilisateurs légitime.

    Bien sûr certains caractères comme ces « guillemets » seront acceptés.

    Edit : Pourquoi cette question, car ça me semble long de faire une fonction propre de ce type ! Donc je voudrais savoir si le prix en vaut la chandelle.

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    filter_var() a des qualités, pour les caractères accentués je ne dit pas (perso en utf8+xhtml j'ai pas de probleme). Ton probleme c'est la neutralisation des balises et des & qui empeche la page d'être valide.
    str_replace va bien, htmlspecialchar aussi.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    La réponse est : pourquoi faire ?

    Pour la sécurité il suffit d'afficher tes données avec htmlentities ou htmlspecialchars.


    Pour le reste il n'est pas intéressant, sauf cas très particuliers que je ne connais pas, de vouloir limiter ou de remplacer des caractères utilisés pour un commentaire.
    On fait souvent des remplacements de caractères lors d'upload de fichiers afin d'avoir un nom de fichier valide pour le serveur, mais pour un commentaire je ne vois aucun intérêt.

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    parfois il est utile d'interdire les \0 et quelques autres caractères qui peuvent etre interpreté de façon aléatoire/inattendue si ton système est relié d'une façon ou d'une autre à un automate tier qui ne nétoie pas ses propres entrées.

    Il se peut aussi que certaine de tes fonctions ne soit pas compatibles avec des chaines binaires et qu'un utilisateur malveillant n'hésitera pas à mettre des caractère qui ne sont pas sur ton clavier mais en utilisera d'autre (volontairement ou non d'ailleurs).

    par exemple si tu autorises un retours à la ligne au milieux d'un champs mail, au moment ou tu écris les entêtes, tu peux, selon le code, ajouter des entetes pirates.

    de même, tu ne te protege pas assez ton commentaire tu risques une injection de code javascript (pense à twiter) ou une simple injection sql. Mais il est vrai que htmlentity (attention aux quotes suffit pour 99% de l'usage web.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Par défaut
    J'utilise déjà htmlentities($value, ENT_COMPAT, "ISO-8859-1"); avant chaque affichage. Pareil pour mysql mysql_real_escape_string (et j'échape les caractères de recherche quand j'en fais une).

    Quand je parle de sécurité, c'est que je partais du principe que moins il y a de caractère autorisé (je parle des inutiles comme les caractères chinois, etc..) Moins il y aura de risque dans les futures failles. Comme le caractère asiatique qui permet de faire une injection SQL via mysql_escape_string ou addslashes.

    Mais apparament personne ne s'embête à nettoyer complètement une chaine. Ça m'encourage à faire un peu plus le fainéant sur cette fonction .

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    N'utilises pas addslashes mais utilises systématiquement mysql_real_escape_string pour protéger tes variables dans les requêtes et pas seulement pour des recherches. Alternativement tu peux utiliser des requêtes préparées mais mysql_real_escape_string est déjà une protection correcte.


    Quel caractère asiatique permet de faire une injection SQL via mysql_real_escape_string ?

    Et je fais comment si j'ai envie de te dire qu'un mot ou une expression française se traduit par tel ou tel caractère chinois ?

    Comme dit plus haut, on limite l'emploi de certains caractères dans des cas très particuliers, le nom d'un fichier pour le rendre compatible, une adresse email avant de s'en servir dans un formulaire d'envoi de mail...
    mais pour un commentaire ce serait embêtant. D'ailleurs je peux bien écrire ce que je veux dans ce forum <?php echo toto ?>
    ... en chinois mon prénom s'écrit ainsi 阿兰

Discussions similaires

  1. problème sur les commentaires
    Par knice dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 12/10/2008, 20h34
  2. Réponses: 2
    Dernier message: 02/09/2008, 13h16
  3. petite question sur les commentaires en C
    Par jocelyn54 dans le forum Débuter
    Réponses: 2
    Dernier message: 25/01/2008, 02h08
  4. Probleme sur les commentaire XML
    Par IGFP dans le forum EDI/Outils
    Réponses: 6
    Dernier message: 27/02/2007, 08h41
  5. xpath-->test sur les commentaires
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/07/2005, 12h14

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