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?

25
demandé sur jondavidjohn 2011-03-17 12:26:23

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 probleminput 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.

42
répondu rook 2011-08-20 18:38:49

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&#x26;#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.

6
répondu sourcejedi 2012-08-20 14:04:39

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é.

3
répondu jondavidjohn 2011-03-17 13:37:18

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.

3
répondu Anthony 2012-02-16 03:35:40

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

1
répondu shankar kumar 2015-06-24 09:08:18