2010-09-20 20 views
9

J'avais une regex comme première ligne de défense contre XSS. Il s'agit en fait de Kohana 2.3.Regex comme première ligne de défense contre XSS

Ceci s'exécute sur le texte entré public (aucun HTML jamais), et refuse l'entrée si échoue ce test. Le texte est toujours affiché avec htmlspecialchars() (ou plus précisément, Kohana's flavour, il ajoute le jeu de caractères entre autres choses). Je mets également un strip_tags() en sortie.

Le client avait un problème lorsqu'il voulait entrer du texte avec des parenthèses. J'ai pensé à modifier ou à étendre l'assistant, mais j'avais aussi une pensée secondaire - si j'autorise les guillemets, y a-t-il vraiment une raison pour laquelle je dois valider? Puis-je simplement compter sur l'échappement en sortie?

Répondre

5

Il n'est jamais sûr de se fier aux expressions régulières pour filtrer les attaques XSS dangereuses. Et bien que vous ne les utilisiez pas, l'échappement en sortie et le filtrage d'entrée, lorsqu'ils sont utilisés correctement, tueront toutes sortes d'attaques. Par conséquent, il ne sert à rien d'avoir Regexes comme «première ligne de défense» lorsque leur aide n'est pas vraiment nécessaire. Comme vous et votre client l'avez découvert, ils ne font que compliquer les choses lorsqu'ils sont utilisés comme ça. Longue histoire courte: si vous utilisez html_entities ou htmlspecialchars pour échapper à votre sortie, vous n'avez pas besoin de regex ni besoin de strip_tags non plus.