Geben Sie die folgenden Zeichenfolgen einschließlich Skript-Tags auf verschiedene Arten aus und vergleichen Sie die Unterschiede.
@hoge
<script>
alert('you are an idiot');
</script>
erb
<%= @hoge %>
Ausgabe
<script> alert('you are an idiot'); </script>
XSS kann vermieden werden, Zeilenumbrüche und Leerzeichen werden jedoch nicht wiedergegeben
html_safe
erb
<%= @hoge.html_safe %>
Ausgabe
Skript wird ausgeführt!
Induziert XSS. Trotz seines Namens ist html_safe
überhaupt nicht sicher.
simple_format(@hoge
, sanitize: true)
erb
<%= simple_format(@hoge, sanitize: true) %>
Ausgabe
alert('you are an idiot');
Das Skript-Tag wird gelöscht
h(@hoge
)
erb
<%= h(@hoge) %>
Ausgabe
<script> alert('you are an idiot'); </script>
XSS kann vermieden werden, Zeilenumbrüche und Leerzeichen werden jedoch nicht wiedergegeben
simple_format(h(@hoge
))
erb
<%= simple_format(h(@hoge)) %>
Ausgabe
<script>
alert('you are an idiot');
</script>
XSS tritt nicht auf. Das Skript-Tag wird maskiert und die Zeilenumbrüche bleiben erhalten. Nur das Leerzeichen nach dem Zeilenumbruch wird nicht wiedergegeben.
Wenn Sie den Zeilenumbruch widerspiegeln möchten, scheint simple_format (h (@hoge)
gut zu sein.
Recommended Posts