如何在 ERB 输出中允许换行

发布于 2024-12-14 05:58:31 字数 292 浏览 1 评论 0原文

我试图在

元素中显示数据库中字段的内容。在 html.erb 模板中,代码如下所示:

<p><%= front.gsub(/(\r)?\n/, "<br>") %></p> ...

我遇到的问题是为了逃避中断,我必须在上面的 gsub 末尾应用 .html_safe 方法,但这样做让整个应用程序遭受 XSS 攻击。我怎样才能只允许转义中断?

I'm trying to show the contents of a field from the database in a <p> element. In the html.erb template the code looks like:

<p><%= front.gsub(/(\r)?\n/, "<br>") %></p> ...

The issue I'm having is that to escape the breaks, I have to apply the .html_safe method at the end of the above gsub, but doing so opens the whole application to XSS attacks. How can I only allow the breaks to be escaped?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

⒈起吃苦の倖褔 2024-12-21 05:58:31

您可以使用simple_format方法。

<%= simple_format(front) %>

更多内容请看这里=> http://api.rubyonrails.org/classes/ActionView /Helpers/TextHelper.html#method-i-simple_format

You can use the simple_formatmethod.

<%= simple_format(front) %>

More here => http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

人间不值得 2024-12-21 05:58:31

这是基于 simple_format 帮助者。我们可以使用 sanitize 删除允许 XSS 攻击的不良标签。

<%= sanitize(front).gsub(/(\r)?\n/, "<br/>").html_safe %>

如果您愿意,您还可以使用 strip_tags在用
替换新行之前删除所有 HTML 标记。

<%= strip_tags(front).gsub(/(\r)?\n/, "<br/>").html_safe %>

This is based on the simple_format helper. We can use sanitize to remove bad tags that allow XSS attacks.

<%= sanitize(front).gsub(/(\r)?\n/, "<br/>").html_safe %>

You can also use strip_tags if you want to remove all HTML tags before replacing new lines with <br>.

<%= strip_tags(front).gsub(/(\r)?\n/, "<br/>").html_safe %>
泪意 2024-12-21 05:58:31

您是否考虑过将文本包装到

 标签中?这将保留基本格式(换行符、空格……)。

Have you considered wrapping the text into <pre>-tags instead? That will keep the basic formatting (newlines, spaces, ...).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文