2010-02-26 5 views
0

J'ai une fonction de journal sur mon panneau d'administration qui vérifie que l'entrée de l'utilisateur est correcte et, si elle n'est pas correcte, l'écrit dans un fichier journal. Ce fichier journal est écrit à l'administrateur lorsqu'il est connecté.XSS PHP Log Filter?

Je testais mon site à la recherche de vulnérabilités et j'ai réussi à exploiter pleinement mon serveur à l'aide d'un trou XSS. J'ai essayé de filtrer l'entrée journalisés en vérifiant l'entrée par cette fonction:

function isXSS($in){ 
    return preg_match("[<>(%[0-9a-fA-F]{2}+)]", $in) == 1; 
} 

mais que tout soit marque serait paranoidly comme un ver détestée XSS, ou d'ignorer les injections XSS communes. Je pense que le problème est le quantificateur +, mais j'ai entendu dire que d'autres regex PHP le permettent.

Répondre

2

Quel est le problème avec le bon vieux htmlspecialchars? Je vois pourquoi vous pourriez vouloir suivre les utilisateurs potentiellement malveillants, mais si vous investissez votre énergie en bloquant simplement les trous de sécurité à la place, alors il n'y a vraiment aucun besoin.

1

Vous essayez de enumerate badness, qui est une bataille que vous ne gagnerez jamais. Au lieu de cela, vous devriez être en permettant que par le balisage que vous savez bien, via une bibliothèque comme htmlpurifier

Aussi, je ne suis pas sûr de la syntaxe {2}+, mais je crois que cela est plus proche de ce que vous voulez:

"[<>(%[0-9a-fA-F]{2,})]"