2010-07-14 7 views
2

Je veux filtrer ma sortie pour la rendre plus sûre à partir des attaques XSS (Cross Site Scripting), donc je filtre la sortie avec htmlentities. Le problème est, j'essaye de rendre mon application utf8 compatible ainsi quand j'entre quelque chose comme ಠ_ಠ je voudrais qu'il soit maintenu une fois extrait de la base de données. Existe-t-il une solution simple pour y parvenir? Merci d'avance pour tout conseil.empêcher les htmlentities de détruire les caractères utf8 ಠ_ಠ

Répondre

5

Trois choses

  1. HTML est une sortie sanitization échapper tâche, pas l'entrée filtrage. Vous devez pas effectuer cette tâche avant le stockage, vous ne devriez le faire avant d'afficher.
  2. Si vous essayez d'empêcher XSS, vous n'avez pas besoin d'utiliser htmlentities() - htmlspecialchars() est suffisant. htmlentities() est utilisé uniquement lors de la tentative de rendu d'un contenu à partir d'un codage de caractères différent du codage natif.
  3. Bothfunctions accepter un codage de caractères comme troisième argument.

Alors, enfin:

echo htmlspecialchars($content, ENT_QUOTES, 'UTF-8'); 

Où si vous avez utilisé ENT_NOQUOTES vous pourriez être vulnérable à certains types de XSS.

+0

merci beaucoup Peter, grande information – Scarface

+0

This_ಠ ಠ_ಠ ಠ_ಠ ಠ_ಠ ಠ_ಠ – Scarface

+1

-1 Ceci n'arrête pas tous les xss, les guillemets sont dangereux. – rook

2

$var=htmlspecialchars($var,ENT_QUOTES,"UTF-8");

+0

et qui filtrera encore la sortie les mêmes entités d'attente le feraient? – Scarface

+0

Regardez la documentation PHP pour savoir comment htmlspecialchars et htmlentities diffèrent. –

+1

@Scarface Non, c'est beaucoup mieux d'arrêter XSS que htmlentties(). Il y a des cas où vous n'avez pas besoin de '<>', par exemple si vous êtes dans une balise body et que vous injectez un 'onload =', et cela empêchera cela. – rook

Questions connexes