Equivalence de htmlspecialchars()

Résolu
Mouch89 Messages postés 118 Statut Membre -  
Mouch89 Messages postés 118 Statut Membre -
Bonjour,

J'aimerais sécuriser l'affichage des entrées utilisateurs (commentaires d'articles, témoignages, envoi par messagerie interne au site, etc).

Je me suis naturellement tourné vers htmlspecialchars, mais la fonction telle qu'elle est ne me convient pas. J'aimerais quelque chose de plus propre dans l'affichage.
Limite une fonction qui supprime automatiquement les balises <qqc></qqc> m'irait. Ca existe une fonction comme ça ? Ou je dois faire la mienne ?

Et le top du top, ça serait une fonction qui me laisse les <b> et <i> !

Vous avez connaissance de fonctions de ce type ?

Merci de votre aide !

A voir également:

5 réponses

graffx Messages postés 7513 Statut Contributeur 1 975
 
Attendons confirmation mais je ne suis pas sur qu'il y a moyen avec une fonction php de supprimer quelque balises seulement.

Il faut tricher a mon avis, peut en faisant ton bbcode?
0
arthezius Messages postés 3756 Statut Membre 475
 
strip_tags()
Vous pouvez utiliser ce paramètre optionnel pour spécifier les balises qui ne doivent pas être supprimées. 

https://www.php.net/manual/fr/function.strip-tags.php
0
Mouch89 Messages postés 118 Statut Membre 7
 
J'ai bien vu cette fonction, mais y'a deux avertissements de sécurité pour son utilisation. Autant dire que j'accroche pas vraiment !
0
Mouch89 Messages postés 118 Statut Membre 7
 
Ca parait pas très compliqué à coder, on parcourt notre chaine, et on supprime tout ce qui se trouve entre des chevrons (chevrons y compris).

Non ? Bon y'a encore quelques trucs a prévoir, mais dans l'idée c'est ça :)
0
graffx Messages postés 7513 Statut Contributeur 1 975
 
Oui tu dosi pouvoir faire comme ca je vais jeter un oeil de mon coté en attendant d'autres reponses.
0
Mouch89 Messages postés 118 Statut Membre 7
 
J'ai fait un ptit truc qui vide ce qui se trouve entre des balises < et > !
Bon, y'a encore des choses à revoir ou implémenter (une liste blanche des balises à accepter) mais je pense qu'elle est opérationnelle là.

function filtrerChevrons($chaine)   
{   
 $debut = $fin = -1;   
    
 for ($i=0 ; $i<strlen($chaine) ; $i++)   
 {   
  if ($chaine[$i] == '<') $debut = $i;   
  else if ($chaine[$i] == '>') $fin = $i;   
     
  if (($debut != -1) && ($fin != -1))   
  {   
   $longueur = $fin - $debut + 1;   
      
   $chaine_buffer = substr($chaine, $debut, $longueur);   
      
   if (strpos($chaine_buffer, '/')) $remplacement = '< />';   
   else $remplacement = '< >';   
      
   $chaine = substr_replace($chaine, $remplacement, $debut, $longueur);   
      
   $debut = $fin = -1;   
  }   
 }   
 return $chaine;   
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mouch89 Messages postés 118 Statut Membre 7
 
En fait, c'est pas la solution idéale niveau sécurité (pas étonnant je dois dire :) ).

L'utilisateur peut par exemple rentrer <strong<>>texte en gras</strong</>> et la fonction fait planter le chargement de la page !

Il y a clairement un soucis avec le strlen de la chaine dans une boucle for alors que la chaine est de taille variable...

On peut régler ce soucis en donner un plafond fixe à la boucle for avec $plafond=strlen puis en utilisant $plafond dans la boucle. J'ai testé, ça résout bien ce pb mais j'ai peur qu'il y en ai beaucoup d'autres des pb !

Du coup, je vais rester sur un htmlspecialchars, tant pis si c'est moche, ou moins c'est bien securisé (je crois).
0