Entrez un saut de ligne dans le formulaire
Les sauts de ligne ne sont pas reflétés lors de la sortie
macOS Catalina 10.15.6
ruby 2.6.5
Rails 6.0.3.4
MySQL : 5.6.47
Bootstrap : 4.3.1
simple_format: méthode d'assistance. Sauts de ligne express avec les balises p et br
option h: contre-mesures XSS. Ajouter une fonction d'échappement à simple_format
【référence】
app/controllers/tasks_controller.rb
def show
@task = Task.find(params[:id])
@commits = @task.commits
end
erb:app/views/tasks/show.html.erb
<% @commits.each do |commit| %>
<%= commit.content %>
<% end %>
Avec cette méthode d'affichage, les sauts de ligne dans commit.content ne sont pas reflétés.
<Comme ça>
Cela peut être résolu en utilisant simple_format. Faisons-le réellement.
erb:app/views/tasks/show.html.erb
<!-- simple_utiliser le format-->
<% @commits.each do |commit| %>
<%= simple_format(commit.content) %>
<% end %>
** simple_format est une méthode d'assistance ** qui exprime les sauts de ligne avec des balises p et des balises br. Mettez simplement le texte que vous souhaitez afficher dans simple_format et vous avez terminé.
<Le résultat ressemble à ceci>
Eh bien, pour le moment, l'objectif est atteint. Cependant, il y a un problème avec cette implémentation. Il n'est pas "échappé" </ b>.
Regardons de plus près.
L'évasion est une technique utilisée dans les mesures de sécurité. En termes simples, il a pour rôle " d'éliminer la signification des caractères significatifs </ b>".
Regardons cela concrètement. Par exemple, supposons que vous saisissiez ce qui suit.
Si vous affichez cette valeur sans l'échapper, elle sera reconnue comme une "balise HTML" comme celle-ci.
En HTML, "<" est reconnu comme signifiant "balise commence!". Par conséquent, s'il n'est pas échappé, il sera affiché comme un élément h1.
Cette fonction d'échappement est accordée en utilisant le <% =%> utilisé dans les vues Rails. Cependant, si vous utilisez simple_format, vous perdez cette fonctionnalité.
Par conséquent, lorsque vous utilisez simple_format, utilisez l'option h. C'est un excellent moyen d'ajouter une fonction d'échappement à simple_format.
erb:app/views/tasks/show.html.erb
<%#utiliser l'option h%>
<% @commits.each do |commit| %>
<%= simple_format(h(commit.content)) %>
<% end %>
Cela changera l'affichage comme indiqué ci-dessous.
La signification est privée de "<" etc., et elle est affichée comme un simple symbole ou caractère. Parallèlement à cela, les lettres sont devenues plus petites! (Inclus dans la balise p)
Je veux refléter le saut de ligne du formulaire
Possible avec simple_format!
Mieux vaut utiliser h pour les mesures de sécurité
Il semble que simple_format soit souvent utilisé, mais c'est aussi une méthode d'aide effrayante si les mesures de sécurité sont négligées. Lorsque vous l'utilisez, gardez-le à l'esprit.
Recommended Posts