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

Zend Framework PHP Discussion :

Zend_Validator, pas de script dans textarea [ZF 1.10]


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut Zend_Validator, pas de script dans textarea
    Bonjour,

    j'utilise un validateur sur mon élément textarea de mon formulaire pour ne pas avoir de javascript. Or je voudrais dire j'accepte tout sauf les balises html mais je n'y arrive pas. J'ai essayé de regarder si on avait une variable pour inverser le fonctionnement du validateur (si le validateur détecte une balise script il lance l'erreur, actuellement c'est l'inverse) un peu comme ceci mais pas possible apparamment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $corps = new Zend_Form_Element_Textarea('corps');
    $corps ->setLabel('Corps du texte')
                ->setRequired(true)
                ->setErrorMessages(array('required'=>'Merci de remplir l\'objet de votre mail sans script.'))
                ->addValidator(new Zend_Validate_Regex('/^<(\S+).*>(.*)<\/\1>/',false) )
    Merci

  2. #2
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Salut,

    Dans ce cas pourquoi tu ne fabrique pas ton propre validateur en intégrant ce paramètre?

    Sinon,
    personnellement j'utilise htmlPurifier c'est plus pratique je trouve.

  3. #3
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    en effet htmlPurifier à l'aire plutôt performante. Par contre je suis obliger de développer mon propre validateur en y intégrant cette librairie à l'intérieur car je souhaite que si le validateur retourne une erreur ca ne soumettre pas mon formulaire.
    Je pense utiliser Zend_Validate_Callback mais où dois je enregistrer ma classe ?
    Ensuite j'instancie ma classe dans l'action de mon controlleur comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $corps = new Zend_Form_Element_Textarea('corps'); 
    $corps ->addValidator(new Zend_Validate_Callback('noXSS') )
    où noXSS() est une methode de ma classe validator

    Merci

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour, d'après la doc :

    Votre classe validator:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    class My_Validator()
    {
        public function noXSS(){
            //faire traitement
         }
    }
    ensuite dans la form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $object = new My_Validator();
    $corps = new Zend_Form_Element_Textarea('corps'); 
    $corps ->addValidator(new Zend_Validate_Callback($object,'noXSS') )

  5. #5
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Ton validateur tu peux le coller dans tes librairies persos:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    // Dans /library/My/Validate/NoHtml
     
    class My_Validate_NoHtml extends Zend_Validate_Abstract
    {
        const NO_HTML = 'noHtml';
     
        /**
         * @var array
         */
        protected $_messageTemplates = array(
            self::NO_HTML => "Html Interdit! Tu te crois chez toi ou quoi?!",
        );
     
        public function isValid($value)
        {
            require_once 'tonFichierDeHtmlPurifier';
     
                    $htmlPurifier = new .....ta classe htmlpurifier ......
            $this->_setValue($value);
     
            if ($htmlPurifier->fctionDeVerifDeHtmlPurifier($value)) {
                $this->_error(self::NO_HTML);
                return false;
            }
            return true;
        }
    }

  6. #6
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Merci manuscle mais quand tu fais un extends de Zend_Validate_Abstract il faut peut être lui spécifier où est cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    require_once'Zend/Validate/Abstract.php';
    class My_Validate_NoHtml extends Zend_Validate_Abstract {
    ...
    }
    Merci pour votre aide

    PS : j'adore ton $_messageTemplates

  7. #7
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Citation Envoyé par manuscle
    Ta regex elle teste l'existence de n'importe quelle balise html?! pas uniquement les balises script?[...]si il ne trouve aucune balise il va retourner un contenu filtré, mais il n'y aura rien à filtrer...
    En effet, remarque évidente !!!
    Citation Envoyé par manuscle
    - Je crée un filter qui enlève ce que je veux pas
    - Je crée un validator qui va passer la valeur au filter, si le résultat est différent de la valeur d'origine alors il y avait quelque chose à filtrer donc d'interdit
    Et OUI je vais faire cela je ne connaissez pas Zend_Filter_StripTags. Donc j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public function filtreHtml($texte)
        {
            $filter = new Zend_Filter_StripTags( array('allowTags' => "b") );
                   $valueSansTagHtml = $filter->filter($texte);
     
            return $valueSansTagHtml ;
     
        }
     
     
        public function isValid($value)
        {
     
            $filter = new Zend_Filter_StripTags( array('allowTags' => "b") );
                   $valueSansTagHtml = $filter->filter($value);
     
                // Vérifie si Zend_Filter_StripTags a filtré de l'HTML
            if( $valueSansTagHtml != $value )
            {
                return false;
            }
            else
            {
     
                return true;
        }
    }
    Et le tour est joué merci beaucoup du coup de main

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

Discussions similaires

  1. [TinyMCE] Interpréter du script dans textarea
    Par Lapinou69700 dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 18/04/2012, 20h22
  2. Dans textarea le WRAP passe pas !
    Par jlb59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/01/2009, 05h37
  3. Réponses: 1
    Dernier message: 10/10/2008, 22h50
  4. je n ai pas tout compris dans le script
    Par letigre dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2006, 10h44
  5. Réponses: 2
    Dernier message: 19/02/2006, 12h22

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