Est-il un droit anti-XSS bibliothèque pour PHP?
Je sais déjà comment XSS fonctionne, mais pour trouver toutes les différentes façons d'injecter des entrées malveillantes n'est pas une option.
J'ai vu un couple bibliothèques, mais la plupart d'entre eux sont très incomplètes, ineficient, ou de la licence GPL (à quand les gars, vous apprendre que la GPL n'est pas bon de partager peu de bibliothèques! L'utilisation des MIT)
- Vous pourriez peut-être liste les bibliothèques que vous avez déjà considérés, afin de ne pas perdre notre temps avec tous ces incomplète, inefficace ou mal sous licence des solutions?
- À l'aide d'une bibliothèque de résoudre de nombreux problèmes XSS. Si votre application est complexe, il ne sera pas obtenir tous les. Si votre application est une bonne cible, quelqu'un finira par casser. Vous DEVEZ ABSOLUMENT apprendre XSS œuvres et de les comprendre en détail dans l'ordre pour écrire une application sécurisée. Même si vous utilisez une bibliothèque.
- Tous les “anti-XSS” les bibliothèques sont incomplets par la nature, qu'ils sont en train d'appliquer des heuristiques de travailler sur l'apport pourrait être nocif lorsqu'il est manipulé de façon incorrecte dans l'étage de sortie, mais l'exécution de l'étage d'entrée avec aucune idée de ce que l'étage de sortie comporte. Bien qu'il existe un compromis entre la façon évidente de l'un de vous exploiter, par l'intermédiaire de (faux négatifs) et à quel point vous mangle réel de l'utilisateur (faux positif), vous aurez toujours des "faux" parce que la tâche est intrinsèquement impossible. Anti-XSS est totalement bidon. Vous devez corriger votre sortie de coder comme nécessaire pour le contexte.
- +1 pour bobince commentaire
- Bibliothèque? Je pense que vous voulez dire de l'appel de fonction.
- C'est un vieux thread, mais je voudrais montrer une bonne référence pour l'encodage de sortie pour les autres personnes à la recherche de solutions: owasp.org/index.php/... Cette page web montre que vous devez utiliser différentes méthodes d'encodage en fonction du contexte. HTML, attribut HTML, CSS ou Javascript, chacune de ces situations exigent un type différent de s'échapper.
Vous devez vous connecter pour publier un commentaire.
OWASP propose une bibliothèque de codage, sur qui le temps a été passé à gérer les différents cas de figure.
Obsolète: http://www.owasp.org/index.php/Category:OWASP_Encoding_Project
Maintenant à http://code.google.com/p/reform/
et OWASP de l'anti-xss spécifiques de la bibliothèque est à: http://code.google.com/p/php-antixss/
htmlspecialchars()
est la seule fonction que vous devriez connaître.htmlspecialchars()
pour le HTML, mais pourrait êtrerawurlencode()
,json_encode()
,mysql_real_escape_string()
, que ce soit. Le point principal est, cela dépend de l'étage de sortie et est pas quelque chose qui peut être traité à la saisie à l'aide des “anti-XSS” des mesures.<input value="<?php echo htmlentities($foo,ENT_QUOTES)">
. Sans elle, l'attaquant peut entrerstring" onclick="[bad code]
(note positionnement prudent de citations) et provoquer un mauvais script à exécuter lorsque quelqu'un essaie de modifier l'entrée.ENT_QUOTES
drapeau n'est également d'encoder les guillemets simples, qui c'est valable pour l'utiliser comme valeur de l'attribut délimiteurs de trop (bien que très peu de gens font). C'est la plus sûre chose à faire, mais ce n'est pas vraiment nécessaire, sauf si vous avez une seule cité attributs.HTMLPurifier est le undenied meilleure option pour le nettoyage d'entrée HTML, et htmlspecialchars devrait être appliqué à n'importe quoi d'autre.
Mais les vulnérabilités XSS ne doit pas être nettoyé, parce que ces messages sont des ordures de toute façon. Plutôt de faire votre demande de cautionnement et d'écrire une entrée de journal. Le meilleur jeu de filtres pour atteindre XSS de détection est dans le mod_security règles de base.
Je suis en utilisant un inconspicious mais assez complet attribut de détection d'ici à nouveau input(), voir _xss méthode.
Edit: Merci @mario de remarquer que tout dépend du contexte. Il n'y a vraiment pas de moyen super pour éviter tout cela, dans toutes les occasions. Vous devez ajuster en conséquence.
Edit: je suis corrigée et très reconnaissant pour les deux @bobince et @Tour du soutien sur cette question. C'est à peu près clair pour moi maintenant que
strip_tags
ne va pas empêcher les attaques XSS en aucune façon.J'ai scanné tout mon code avant de répondre pour voir si j'avais un exposé et tout est bon à cause de la
htmlentities($a, ENT_QUOTES)
j'ai été en utilisant principalement à faire face avec le W3C.Cela dit j'ai mis à jour la fonction du soufflet d'un peu d'imiter celui que j'utilise. Je trouve toujours
strip_tags
agréable d'avoir avant htmlentities de sorte que lorsqu'un utilisateur d'essayer d'entrer des tags qu'ils ne polluent pas le résultat final. Dire que l'utilisateur a entrée:<b>ok!</b>
c'est beaucoup plus agréable de montrer que lesok!
que l'impression du texte intégral htmlentities converti.Merci à vous deux très beaucoup d'avoir pris le temps de répondre et d'expliquer.
Si ça vient d'internet de l'utilisateur:
Si cela vient de l'arrière-boutique... ne le fais pas.
Y sont parfaitement valables raisons pour lesquelles une personne à l'entreprise peut avoir besoin de javascript pour telle ou telle page. Il est beaucoup mieux d'être en mesure de se connecter et de blâme que d'arrêter votre uers.
strip_tags
n'est pas une mesure de sécurité. Cela permet toutes sortes de XSS, la méchanceté, comme le<div onmouseover="alert('script injection!')">
. Il n'y a presque jamais une bonne raison pour utiliserstrip_tags
.strip_tags
est assez effective dans la suppression de TOUS les XSS tant que vous dépouiller de tout.htmlspecialchars($var,ENT_QUOTES);
strip_tags
ne bande tous des balises HTML à l'extérieur. C'est donc une aide valable à l'encontre du html brut d'injection.htmlspecialchars
eturlencode
est nécessaire en plus si les données reçues sont à mettre in extenso dans la balise ou un attribut contexte. Mais c'est le point crucial, tout dépend du contexte.htmlspecialchars
seul n'est d'aucune aide si le contexte est RSS par exemple, parce que<script>
entraînerait une XSS exploiter là-bas.htmlspecialchars($var,ENT_QUOTES);
pour arrêter tous les xss, à l'exception de certains cas quand il est déjà dans un<script>
tagENT_QUOTES
que vous l'avez souligné, sans qui htmlspecialchars n'est pas très utile.J'aime htmlpurifier bien, mais je vois comment il peut être inefficace, car il est assez grand. Aussi, il est LGPL, et je ne sais pas si cela relève de votre GPL interdiction.
En plus de zerkms réponse, si vous trouvez que vous avez besoin pour accepter soumis par les utilisateurs, HTML (à partir d'un éditeur WYSIWYG, par exemple), vous aurez besoin d'utiliser un analyseur HTML pour déterminer ce qui peut et ne peut pas être soumis.
J'utilise et je recommande HTML Purificateur d'.
Remarque: Ne sont même pas essayer à utiliser les regex 🙂
Je suis surpris qu'il n'a pas été évoqué ici, mais je préfère htmlAwed à htmlPurifier. C'est-à-jour, joliment sous licence, très petit et très rapide.