9
votes

Sanitize Entrée XSS et entrées HTML dans les rails

Je sais que je peux utiliser l'aide d'ActionView Helper Strip_tags Méthode de mon avis pour assainir la sortie, mais quelle est la meilleure façon de désinfecter la saisie de l'utilisateur avant de le persister à ma DB? Devrais-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 disponible à l'échelle mondiale pour faire quelque chose comme ça.


0 commentaires

4 Réponses :


-1
votes

Pourquoi avez-vous besoin de désinfecter les entrées de l'utilisateur?

Typiquement, tout ce qui est nécessaire est rigoureux, codant / évacuation de l'entrée de l'utilisateur à tout moment, vous l'imprimez ou incorporez dans un bloc de sortie plus grand.


2 commentaires

Aucun sens laissant du code malveillant juste assis dans votre base de données. Plusieurs vecteurs d'attaque dans des applications Web sont déjà un lieu commun et cela semble être une chose facile à réparer, imo. Défense en profondeur, vous savez?


Rails 3 prend la bonne approche. Il s'échappe automatiquement de quelque chose (y compris les données entrées par l'utilisateur) étant sortie dans le code HTML, à l'exception de ces éléments spécifiques que le programmateur indique est déjà HTML-Safe. Rails 3 La défense en profondeur, et elle le fait de manière correcte et rigoureuse, les données étant échappées dans le bon endroit et à la bonne heure.



4
votes

Qu'en est-il de la XSSS_TERMINATE Plugin? < / p>


1 commentaires

2 ans plus tard et deux bowvotes sans commentaire - Les commentaires aideraient au moins les choses plus claires pour les autres utilisateurs. Remarque: au moment de la réponse, nous utilisions des rails 2 et les choses n'étaient pas aussi grandes qu'elles sont maintenant!



0
votes

Peut-être sanitize gem: http://wonko.com/post/sanitize


0 commentaires

-1
votes

Pourquoi voulez-vous assainir les entrées utilisateur? Cela n'a même aucun sens! Vous voulez toujours désinfecter des sorties (évasion), pas les entrées, car le sens de la désinfectation dépend du contexte que vous utilisez le contenu. Il n'y a pas une chaîne en sécurité dans n'importe quel contexte. Vous ne voulez pas de tas de chaînes muchées dans votre base de données qui sont «sûres» dans tout scénario que votre application utilise aujourd'hui, car 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 du contenu basé sur le contexte), alors vous allez bien, peu importe le nombre de citations, de backslashes ou de relevés de table de déposer.


2 commentaires

Dans certains cas, il est logique de "assainir" l'entrée de l'utilisateur avant de la stocker dans la base de données. Par exemple, si un utilisateur entre son nom de famille «

Smith », il n'a pas de sens de stocker la balise HTML dans la base de données. Dans ce cas, il est agréable de dépasser la balise HTML avant d'enregistrer le nom de famille dans la base de données.


La question initiale liée à l'injection (XSS et HTML), auquel cas je tiens cette assainissement est toujours worng. Mais même si vous avez des ordures dans la corde, quelles sont vos chances que la désinfectation 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-ce que cela fait partie d'une entité HTML, et quand fait-il partie d'un nom comme "Smith & Wesson"? Jolie bientôt, vous vous retrouvez avec ceci: Kalzumeau. COM / 2010/06/17 / ...