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 :

Autorisation et Restriction de code HTML


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Points : 135
    Points
    135
    Par défaut Autorisation et Restriction de code HTML
    Bonjour à tous,

    Je souhaite faire un script permetant aux utilisateur de personnalisé leur page de profile, donc pour cela je souhaite autorisé le html.
    Soucis: il est hors de question que j'accepte le javascript.

    Pour le moment je passe donc un strip_tags($page, "<div><span><a>") mais déjà j'ai un problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script> alert(0); </script>
    ne fonctionne effectivement pas, par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="index.php" onclick="alert(0)">test</a>
    laisse passer le javascript.

    Donc voila:
    1] quel balises html me conseillé vous d'autoriser ?
    2] comment restreindre les arguments d'une balise (par exemple uniquement href pour <a>)
    3] y'a il également moyen de restreindre le css (autorisé le style="" mais pas tout (pour, par exemple, éviter un float:left qui peterai tout le site)

    Merci beaucoup

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Sur la page de la documentation officielle de http://fr.php.net/strip_tags il y a de nombreuses fonction permettant de faire ce que tu souhaites :

    Supprimer les tags et les attributs non autorisés :
    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
     
    function strip_tags_attributes($string,$allowtags=NULL,$allowattributes=NULL){ 
        $string = strip_tags($string,$allowtags); 
        if (!is_null($allowattributes)) { 
            if(!is_array($allowattributes)) 
                $allowattributes = explode(",",$allowattributes); 
            if(is_array($allowattributes)) 
                $allowattributes = implode(")(?<!",$allowattributes); 
            if (strlen($allowattributes) > 0) 
                $allowattributes = "(?<!".$allowattributes.")"; 
            $string = preg_replace_callback("/<[^>]*>/i",create_function( 
                '$matches', 
                'return preg_replace("/ [^ =]*'.$allowattributes.'=(\"[^\"]*\"|\'[^\']*\')/i", "", $matches[0]);'    
            ),$string); 
        } 
        return $string; 
    }
    Ou plus directement, supprimer le JavaScript :
    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
    29
    30
     
    function strip_javascript($filter){ 
     
        // realign javascript href to onclick 
        $filter = preg_replace("/href=(['\"]).*?javascript:(.*)? 
    \\1/i", "onclick=' $2 '", $filter); 
     
        //remove javascript from tags 
        while( preg_match("/<(.*)?javascript.*?\(.*?((?>[^()]+) 
    |(?R)).*?\)?\)(.*)?>/i", $filter)) 
            $filter = preg_replace("/<(.*)?javascript.*?\(.*?((?> 
    [^()]+)|(?R)).*?\)?\)(.*)?>/i", "<$1$3$4$5>", $filter); 
     
        // dump expressions from contibuted content 
        if(0) $filter = preg_replace("/:expression\(.*?((?>[^ 
    (.*?)]+)|(?R)).*?\)\)/i", "", $filter); 
     
        while( preg_match("/<(.*)?:expr.*?\(.*?((?>[^()]+)|(? 
    R)).*?\)?\)(.*)?>/i", $filter)) 
            $filter = preg_replace("/<(.*)?:expr.*?\(.*?((?>[^()] 
    +)|(?R)).*?\)?\)(.*)?>/i", "<$1$3$4$5>", $filter); 
     
        // remove all on* events    
        while( preg_match("/<(.*)?\s?on.+?=?\s?.+?(['\"]).*?\\2 
    \s?(.*)?>/i", $filter) ) 
           $filter = preg_replace("/<(.*)?\s?on.+?=?\s?.+? 
    (['\"]).*?\\2\s?(.*)?>/i", "<$1$3>", $filter); 
     
        return $filter; 
    }
    Perso j'autoriserais a, strong, em, p, blockquote. J'autoriserais seulement les attributs suivants :

    href, title

    Je mettrais automatiquement rel="nofollow" et target="_blank" sur les liens.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Points : 135
    Points
    135
    Par défaut
    simplement génialissime
    exactement ce qu'il me fallait, avec ça j'ai de quoi m'occuper ^^

    merci beaucoup
    Résolu.

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

Discussions similaires

  1. Insertion code html dans bdd
    Par jeff37 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/04/2004, 15h03
  2. code html en ram -> TWebBrowser pour affichage
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/04/2003, 22h55
  3. Récupérer le code HTML d'une page avec Delphi 7
    Par PsyKroPack dans le forum Web & réseau
    Réponses: 5
    Dernier message: 06/02/2003, 21h56
  4. Générer du code HTML
    Par patpst dans le forum C++Builder
    Réponses: 4
    Dernier message: 27/11/2002, 10h27
  5. composant builder4 pour afficher du code html
    Par BranRuz dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/09/2002, 11h35

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