CodeIgniter-pourquoi utiliser XSS clean
si je nettoie mes inserts DB, et aussi en échappant au HTML j'écris avec htmlentities($text, ENT_COMPAT, 'UTF-8')
- y a-t-il un intérêt à filtrer également les entrées avec xss_clean? Quels sont les autres avantages donne-t-il?
5 réponses
xss_clean () est vaste, et aussi stupide. 90% de cette fonction ne fait rien pour empêcher xss. Comme à la recherche pour le mot alert
mais pas document.cookie
. Aucun pirate ne va utiliser alert
dans leur exploit, ils vont détourner le cookie avec xss ou lire un jeton CSRF pour faire un XHR.
Toutefois running htmlentities()
ou htmlspecialchars()
c'est redondant. Un cas où xss_clean()
résout le problème et htmlentities($text, ENT_COMPAT, 'UTF-8')
n'est suivantes:
<?php
print "<img src='$var'>";
?>
un simple poc est:
http://localhost/xss.le php?var=http://domaine/some_image.gif '%20onload=alert (/xss/)
ajouter onload=
gestionnaire d'événement pour la balise d'image. Une méthode pour arrêter cette forme de xss est htmlspecialchars($var,ENT_QUOTES);
dans ce cas xss_clean()
préviendra aussi cela.
Cependant, en citant la documentation de xss_clean ():
Rien n'est jamais 100% infaillible, de bien sûr, mais je n'ai pas été en mesure d'obtenir rien passé le filtre.
cela dit, XSS est un output problem
input problem
. Par exemple, cette fonction ne peut pas tenir compte du fait que la variable est déjà dans un <script>
gestionnaire d'étiquettes ou d'événements. Il n'arrête pas non plus DOM basé XSS. Vous avez besoin de prendre en considération comment vous utilisez les données afin d'utiliser la meilleure fonction. Filtrage de toutes les données l'entrée est un mauvaise pratique. Non seulement elle est peu sûre, mais elle corrompt également les données qui peuvent rendre les comparaisons difficiles.
dans votre cas, "les méthodes plus strictes sont bien, et le poids plus léger". Les développeurs de CodeIgniter ont l'intention d'utiliser xss_clean () pour un cas d'utilisation différent, "un système de commentaires ou un forum qui permet des balises HTML 'sûres'". Ce n'est pas clair dans la documentation, où xss_clean est affiché appliqué à un champ Nom d'utilisateur.
Il y a une autre raison de ne jamais utiliser xss_clean(), qui n'a pas été mise en évidence sur stackoverflow jusqu'à présent. xss_clean() a été interrompue pendant 2011 et 2012, et c'est impossible à réparer complètement. Au moins sans une refonte complète, ce qui n'est pas arrivé. pour le moment, il est encore vulnérable à des chaînes comme celle-ci:
<a href="j&#x41;vascript:alert%252831337%2529">Hello</a>
l'implémentation actuelle de xss_clean() commence par appliquer effectivement urldecode() et html_entity_decode () à la chaîne entière. Cela est nécessaire afin qu'il puisse utiliser un contrôle naïf pour des choses comme "javascript:". À la fin, il renvoie le décodé chaîne.
un attaquant peut simplement encoder son exploit deux fois. Il sera décodé une fois par xss_clean(), et passer aussi propre. Vous avez alors un exploit encodé, prêt à être exécuté dans le navigateur.
j'appelle ces chèques "naïfs" et intraitables parce qu'ils sont largement tributaires d'expressions régulières. HTML n'est pas un langage courant. vous avez besoin d'un analyseur plus puissant pour correspondre à celui du navigateur; xss_clean() n'a pas quelque chose comme ça. Peut-être est-il possible de whitelist un sous-ensemble de HTML, qui lixes proprement avec des expressions régulières. Cependant, xss_clean () est une liste noire.
Oui, vous devriez toujours être en l'utilisant, en général, je faire une règle pour l'utiliser au moins une fois sur face au public, entrée, ce qui signifie toute entrée à laquelle n'importe qui peut accéder et soumettre.
Généralement désinfection à l'entrée pour les requêtes DB semble comme un effet secondaire que le vrai but de la fonction est d'empêcher attaques de scripts entre sites.
je ne vais pas entrer dans les détails concrets de chaque étape xss_clean prend, mais je vais vous dire, il n' plus que les quelques pas que vous avez mentionnés, j'ai pastied la source de la fonction xss_clean pour que vous puissiez vous regarder vous-même, il est entièrement commenté.
je vous conseille d'utiliser http://htmlpurifier.org/ pour faire XSS purification. Je travaille sur l'extension de ma classe D'entrée CodeIgniter pour commencer à tirer parti.
si vous voulez que le filtre s'exécute automatiquement chaque fois qu'il rencontre des données POST ou COOKIE, vous pouvez l'activer en ouvrant votre application/config/config.fichier php et paramétrage de celui-ci: $config ['global_xss_filtering'] = TRUE;
vous pouvez activer la protection csrf en ouvrant votre application / config / config.fichier php et paramétrage de celui-ci: $config ['csrf_protection'] = TRUE;
pour plus de détails, veuillez voir la suite lien.
https://ellislab.com/codeigniter/user-guide/libraries/security.html