Je sais que je peux utiliser l'aide d'ActionView Helper Strip_tags CODE> 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. P>
4 Réponses :
Pourquoi avez-vous besoin de désinfecter les entrées de l'utilisateur? p>
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. P>
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.
Qu'en est-il de la XSSS_TERMINATE Plugin? < / p>
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!
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. P>
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 «
La question initiale liée à l'injection (XSS et HTML), auquel cas je tiens cette assainissement est toujours i> 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 / ...