Quelle est la qualité de la méthode Rails sanitize ()?
Puis-je utiliser ActionView::Assistants::SanitizeHelper#désinfecter sur saisies par l'utilisateur le texte que j'ai l'intention de montrer à d'autres utilisateurs? E. g., il sera de gérer correctement tous les cas décrits sur ce site?
Aussi, la documentation mentionne:
Veuillez noter que la désinfection
texte fourni par l'utilisateur n'est pas garantie
que la majoration est valable
(conforme à un type de document) ou
même bien formé. La sortie peut encore
par exemple contenir sans échappement ’<’, ’>’, ’&’
caractères et de confondre les navigateurs.
Quelle est la meilleure façon de gérer cela? Passer le aseptisé de texte par le biais de Hpricot
avant de les afficher?
source d'informationauteur Tom Lehman
Vous devez vous connecter pour publier un commentaire.
Ryan Grove Désinfecter va beaucoup plus loin que les Rails de 3
sanitize
. Il s'assure de la sortie HTML est bien formé et a trois haut-listes blanches:Désinfecter::Config::la restriction de l'
Permet que de très simple formatage en ligne de balisage. Pas de liens, d'images ou d'éléments de bloc.
Désinfecter::Config::BASE
Permet une variété de balisage y compris les balises de mise en forme, des liens, et des listes. Les Images et les tableaux ne sont pas autorisés, les liens sont limités à FTP, HTTP, HTTPS, et mailto protocoles, et un attribut est ajouté à tous les liens pour atténuer SEO spam.
Désinfecter::Config::DÉCONTRACTÉ Permet une plus grande variété de balisage de BASE, y compris les images et les tables. Les liens sont toujours limités à FTP, HTTP, HTTPS, et mailto protocoles, tandis que les images sont limitées à HTTP et HTTPS. Dans ce mode, n'est pas ajouté aux liens.
Désinfecter est certainement mieux que le "h" helper. Au lieu de s'échapper de tout, il permet en effet les balises html que vous spécifiez. Et oui, il empêche le cross-site scripting, car elle élimine javascript à partir de la combinaison entièrement.
En bref, à la fois le travail sera fait. Utiliser le "h" quand vous ne vous attendez à rien d'autre que texte brut, et l'utilisation de désinfecter quand vous voulez permettre à certains, ou vous croyez que les gens peuvent essayer d'y entrer. Même si vous désactivez tous les tags avec désinfecter, ça va "jolie" le code en supprimant, au lieu de s'échapper comme le "h" ne.
Comme incomplète tags: Vous pouvez exécuter une validation sur le modèle qui passe html contenant les champs à travers hpricot, mais je pense que c'est exagéré dans la plupart des applications.
Le meilleur cours de l'action dépend de deux choses:
En règle générale, je ne suis pas permettre à mes utilisateurs de l'entrée en html au lieu de cela je leur entrée textile.
Sur rails 3.x:
La saisie de l'utilisateur est assaini par défaut. Vous n'avez pas à faire quoi que ce soit, sauf si vous souhaitez que vos utilisateurs puissent envoyer des html. Dans ce cas, continuez à lire.
Cette railscast traite avec les attaques XSS sur rails 3.
Sur rails 2.x:
Si vous ne laissez pas n'importe quel code html de votre utilisateur, il suffit de protéger votre sortie avec la
h
méthode, comme ceci:Si vous voulez que vos utilisateurs d'envoyer en html: vous pouvez utiliser les rails'
sanitize
méthode ou HTML::StathamSanitizer