[RUBY] Je souhaite utiliser la méthode de désinfection autre que View.

Nous avons effectué un diagnostic de sécurité de l'application actuellement en cours de développement, mais avons trouvé une vulnérabilité appelée XSS (Cross Site Scripting) et avons décidé de la corriger. Cela semble être une connaissance trop évidente pour un développeur Web, mais c'était la première fois pour moi de m'en occuper, donc c'était assez difficile. J'avais quelques pierres d'achoppement, alors je vais en écrire une cette fois.

Ce que vous voulez réaliser

https://qiita.com/kamohicokamo/items/571c58f2d6738a7dfe6a En référence à cet article, je voudrais nettoyer les données pour les contre-mesures XSS.

Exemple:

haml:name.html.haml


'Yamada Taro<script>alert("Yamada Taroです")</script>'

Si vous l'affichez tel quel, スクリーンショット 2020-10-12 1.19.46.png

Le JavaScript intégré est exécuté. C'est mauvais pour la sécurité.

= sanitize 'Yamada Taro<script>alert("Yamada Taroです")</script>'

Avec ce assainir,

スクリーンショット 2020-10-12 1.19.28.png

De cette façon, la balise de script est supprimée et devient simplement du texte.

pourtant

Vous pouvez prendre la peine d'écrire sanitize dans View, mais je veux le désactiver lorsqu'une chaîne de caractères contenant des balises html est entrée.

Cependant, puisque cette méthode sanitize est une méthode d'aide, elle est difficile à utiliser sauf pour View ...

Méthode

J'ai fait une méthode comme celle-ci.

model


def remove_script_tag(str)
  ActionController::Base.helpers.sanitize(str)
end

Si vous utilisez bien cette méthode avec before_validation ou before_save, vous devriez pouvoir invalider même si un script malveillant est envoyé sous forme de chaîne.

environnement

ruby 2.6.6 rails 6.0.3.2

Recommended Posts

Je souhaite utiliser la méthode de désinfection autre que View.
Lorsque vous souhaitez utiliser la méthode à l'extérieur
Je veux appeler la méthode principale en utilisant la réflexion
[Commentaire approximatif] Je veux épouser la méthode du pluck
Comment utiliser la méthode link_to
Comment utiliser la méthode include?
Comment utiliser la méthode form_with
Je veux appeler une méthode et compter le nombre
J'ai essayé d'expliquer la méthode
Je souhaite utiliser l'API Java 8 DateTime lentement (maintenant)
[Rails] Comment utiliser la méthode de la carte
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
[Java] Comment utiliser la méthode toString ()
Je voulais ajouter @VisibleForTesting à la méthode
J'étais accro à la méthode du rouleau
Je veux utiliser @Autowired dans Servlet
Je veux écrire une JSP dans Emacs plus facilement que la valeur par défaut.
Utilisez la méthode de permutation pour que tous les utilisateurs par défaut se suivent
Je veux passer l'argument d'Annotation et l'argument de la méthode d'appel à aspect
Je veux que vous utilisiez Enum # name () pour la clé de SharedPreference
[Ruby] Je veux faire un saut de méthode!
Je veux var_dump le contenu de l'intention
Sortie de la façon d'utiliser la méthode slice
Comment utiliser la méthode replace () (Java Silver)
Je veux tronquer après la virgule décimale
Je veux obtenir la valeur en Ruby
[Introduction à Ruby] Comment utiliser la méthode slice
Vous pouvez ne pas vouloir utiliser la méthode remove sur ArrayList très souvent
Je veux que vous utilisiez Scala comme meilleur Java pour le moment
[Eclipse] Je veux utiliser la fonction de complétion, mais je veux réussir à confirmer la complétion avec un espace
Je souhaite également utiliser Combine dans UIKit.
Je souhaite utiliser les fonctions pratiques de Clojure dans Kotlin
Je veux appeler une méthode d'une autre classe
[Java] Je souhaite calculer la différence par rapport à la date
Je veux utiliser NetBeans sur Mac → Je peux l'utiliser!
Je veux intégrer n'importe quel TraceId dans le journal
Expression de pointage Je souhaite en spécifier plusieurs
Je veux aussi utiliser des coquillages à Laradock! !!
Je veux aussi utiliser ES2015 avec Java! → (´ ・ ω ・ `)
Je veux utiliser une petite icône dans Rails
Je veux connaître la réponse de l'application Janken
Je souhaite afficher le nom de l'affiche du commentaire
Je souhaite utiliser le mode sombre avec l'application SWT
[Android Studio] Je souhaite utiliser une bibliothèque Maven sur Android
Je veux retourner la position de défilement de UITableView!
Je souhaite simplifier la sortie du journal sur Android
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Je souhaite lire le fichier de propriétés avec un nom de fichier autre que application.yml ou application- [nom du profil] .yml avec Spring Boot
Comment utiliser la méthode getter / setter (en orientation objet)
[Rails] [bootstrap] Je souhaite modifier la taille de la police de manière réactive
(´-`) .. oO (Je veux trouver facilement la sortie standard" Hello ".