2009-10-18 3 views
8

Je sais que je peux utiliser la méthode d'assistance ActionView strip_tags dans mes vues pour assainir la sortie, mais quel est le meilleur moyen de désinfecter l'entrée de l'utilisateur avant de la persister dans mon db? Dois-je trouver un moyen d'inclure l'assistant d'affichage dans mon contrôleur et de réutiliser la méthode strip_tags? Je pensais que les rails auraient quelque chose de globalement disponible pour faire quelque chose comme ça.Désinfecter l'entrée Entrée XSS et HTML dans les rails

Répondre

4

Qu'en est-il du plugin xss_terminate?

+3

2 ans plus tard et deux downvotes sans commentaires - les commentaires aideraient au moins les choses plus clairement pour les autres utilisateurs. Note: au moment de la réponse, nous utilisions Rails 2 et les choses n'étaient pas aussi bonnes qu'elles le sont maintenant! –

-1

Pourquoi devez-vous nettoyer l'entrée de l'utilisateur?

En règle générale, tout ce dont vous avez besoin est un encodage/échappement rigoureux et contextuel de l'entrée de l'utilisateur chaque fois que vous l'imprimez ou l'intégrez dans un plus grand bloc de sortie.

+0

Aucun sens laissant le code malveillant simplement assis dans votre base de données. Les vecteurs d'attaque multiples dans les applications Web sont déjà un lieu commun et cela semble juste une chose facile à résoudre, IMO. Défense en profondeur, tu sais? – phreakre

+0

Rails 3 prend la bonne approche. Il html-échappe automatiquement tout ce qui (y compris les données entrées par l'utilisateur) en sortie dans le html, sauf les éléments spécifiques que le programmeur indique sont déjà html-safe. Rails 3 fait de la défense en profondeur, et cela de manière correcte et rigoureuse, avec des données échappées au bon endroit et au bon moment. – yfeldblum

-1

Pourquoi voulez-vous désinfectez les entrées utilisateur? Cela n'a même pas de sens! Vous voulez toujours désinfecter (sortir) les sorties, pas les entrées, car la signification de la désinfection dépend du contexte dans lequel vous utilisez le contenu. Il n'existe pas de chaîne qui soit sûre dans n'importe quel contexte. Vous ne voulez pas qu'un groupe de chaînes mutilées dans votre base de données soit "sûr" dans n'importe quel scénario que votre application les utilise aujourd'hui, parce que demain, vous voudrez peut-être faire quelque chose de différent avec eux. Si votre couche de présentation fait la bonne chose (en échappant au contenu en fonction du contexte), tout va bien, peu importe le nombre de citations, d'antislashs ou d'instructions DROP TABLE qui s'y trouvent.

+0

Dans certains cas, il est judicieux de "désinfecter" les entrées utilisateur avant de les stocker dans la base de données. Par exemple, si un utilisateur entre son nom de famille en tant que "

Smith

", cela n'a aucun sens de stocker la balise html dans la base de données. Dans ce cas, il est bon de supprimer la balise html avant d'enregistrer le nom de famille dans la base de données. –

+0

La question originale liée à l'injection (XSS et HTML), auquel cas je considère que la désinfection est * toujours * usée. Mais même si vous avez des déchets dans la ficelle, quelles sont vos chances que l'assainissement va trouver les ordures? Il est difficile pour un algorithme de déterminer quelle partie est et n'est pas un nom. Par exemple, quand est cette partie d'une entité HTML et quand est-ce qu'elle fait partie d'un nom comme "Smith & Wesson"? Bientôt, vous finissez avec ceci: http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Enno

Questions connexes