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.
https://qiita.com/kamohicokamo/items/571c58f2d6738a7dfe6a En référence à cet article, je voudrais nettoyer les données pour les contre-mesures XSS.
haml:name.html.haml
'Yamada Taro<script>alert("Yamada Taroです")</script>'
Si vous l'affichez tel quel,
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
,
De cette façon, la balise de script est supprimée et devient simplement du texte.
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 ...
J'ai fait une méthode comme celle-ci.
model
def remove_script_tag(str)
ActionController::Base.helpers.sanitize(str)
end
sanitize
supprime uniquement la balise <script>
par défaut, elle est donc définie comme remove_script_tag
.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.
ruby 2.6.6 rails 6.0.3.2
Recommended Posts