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>
erb
<%= @hoge %>
production
<script> alert('you are an idiot'); </script>
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é!
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');
La balise script
est effacée
h(@hoge
)
erb
<%= h(@hoge) %>
production
<script> alert('you are an idiot'); </script>
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>
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é.
Si vous voulez refléter le saut de ligne, simple_format (h (@hoge)
semble être bon.
Recommended Posts