[RUBY] Comment écrire lorsque vous souhaitez conserver les sauts de ligne et la sortie tout en évitant XSS dans Rails

Produisez les chaînes de caractères suivantes, y compris les balises Script de différentes manières et comparez les différences.

@hoge


<script>
  alert('you are an idiot');
</script>

Sortie telle quelle

erb


<%= @hoge %>

production


<script> alert('you are an idiot'); </script>

résultat

XSS peut être évité, mais les sauts de ligne et les espaces ne sont pas reflétés

html_safe

erb


<%= @hoge.html_safe %>

production


Le script est exécuté!

résultat

Induit XSS. Malgré son nom, html_safe n'est pas du tout sûr.

simple_format(@hoge, sanitize: true)

erb


<%= simple_format(@hoge, sanitize: true) %>

production


alert('you are an idiot');

résultat

La balise script est effacée

h(@hoge)

erb


<%= h(@hoge) %>

production


<script> alert('you are an idiot'); </script>

résultat

XSS peut être évité, mais les sauts de ligne et les espaces ne sont pas reflétés

simple_format(h(@hoge))

erb


<%= simple_format(h(@hoge)) %>

production


<script>
alert('you are an idiot');
</script>

résultat

XSS ne se produit pas. La balise de script est échappée et les sauts de ligne sont conservés. Seul l'espace après le saut de ligne n'est pas reflété.

Impressions

Si vous voulez refléter le saut de ligne, simple_format (h (@hoge) semble être bon.

Recommended Posts

Comment écrire lorsque vous souhaitez conserver les sauts de ligne et la sortie tout en évitant XSS dans Rails
Lorsque vous souhaitez écrire explicitement OR ou AND avec ransack
Comment écrire dans la classe Model lorsque vous souhaitez enregistrer des données binaires dans DB avec PlayFramework
Comment écrire lorsque vous voulez gérer un "tableau de chaînes en langage C" comme argv [] dans Ruby-FFI
Conseils lorsque vous souhaitez insérer de nombreux sauts de ligne et tabulations lors du remplacement d'une chaîne de caractères
[Java] Comment sortir et écrire des fichiers!
Lorsque vous souhaitez lier InputStream dans JDBI3
[Ruby on Rails] Comment écrire enum en japonais
Comment écrire des rails
Comment écrire une recherche de comparaison de dates dans Rails
Lorsque vous souhaitez remplacer dynamiquement l'annotation dans Java 8
[Ruby + Rails] Lorsque vous souhaitez vous inscrire dans la liste de diffusion de Mailchimp avec l'enregistrement de l'utilisateur
Comment résoudre le problème lorsque la valeur n'est pas envoyée lorsque le formulaire est désactivé dans les rails et envoyé
Comment spécifier le code de caractère et le code de saut de ligne avec JAXB
[Rails] Comment définir des macros dans Rspec et standardiser le traitement
Comment définir le code de caractère et le code de saut de ligne dans Eclipse
[Rails] Différentes différences entre redirect_to et méthode de rendu et méthode de sortie de la méthode de rendu
Comment écrire et noter lors de la migration de VB vers JAVA
docker-compose.yml lorsque vous voulez garder mysql en cours d'exécution avec docker
[Rails 5] lien japanMap Comment écrire des paramètres dans le fichier js.erb
[Rails] Comment écrire user_id (clé externe) dans un paramètre fort
Comment écrire des graines de Rails
Comment écrire le routage Rails
[Pour les super débutants] Les connaissances minimales que vous voulez garder à l'esprit avec les hachages et les symboles
Emplacement de la définition de la méthode Résumé de la vérification Lorsque défini dans le projet et Rails / Gem
Comment autoriser les annotations à définir des membres que vous ne souhaitez pas afficher lors de la sérialisation récursive d'une chaîne d'un objet
[Rails / Routing] Comment faire référence au contrôleur dans votre propre répertoire
ProxyFactory est pratique lorsque vous souhaitez tester AOP avec Spring!
[Webpacker] Résumé de l'installation de Bootstrap et jQuery dans Rails 6.0
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Comment écrire Ruby en une seule ligne Résumé par débutant
[jOOQ] Comment utiliser CASE WHEN dans la clause WHERE / AND / OR
Comment supprimer de grandes quantités de données dans Rails et problèmes
[Rails] Comment écrire la gestion des exceptions?
Comment installer jQuery dans Rails 6
Comment installer Swiper in Rails
Lorsque vous souhaitez que Rails désactive une session pour un contrôleur spécifique
Points à prendre en compte lors de la combinaison d'instructions if et d'opérateurs logiques
Comment implémenter la fonctionnalité de recherche dans Rails
Comment changer le nom de l'application dans les rails
Comment insérer une vidéo dans Rails
Comment utiliser MySQL dans le didacticiel Rails
Comment résoudre les erreurs qui se produisent lors de l'installation de Rails 5.1.3
Commandes de base de Rails que vous souhaitez apprendre
[Rails] [Note] Quand ajouter = à <%%> et quand pas
[rails] Comment configurer le routage dans les ressources
Comment implémenter la fonctionnalité de classement dans Rails
Comment utiliser credentials.yml.enc introduit à partir de Rails 5.2
Comment rediriger vers http-> https lorsque SSL est activé dans l'environnement Rails × Heroku
Lorsque vous souhaitez notifier une erreur quelque part lors de l'utilisation de graphql-spring-boot avec Spring Boot