Ext*_*tor 5 html escaping ruby-on-rails-4
在控制器中,我有以下flash消息:
flash[:notice] = %Q[Please #{view_context.link_to('create a new account', new_account_path)}, after that you will be able to create orders.].html_safe
Run Code Online (Sandbox Code Playgroud)
这是布局中的闪存区域:
<div id="main_flash_area">
<% flash.each do |name, msg| %>
<div class="alert text-center alert-info">
<a class="close" data-dismiss="alert">× ???????</a>
<%= msg %>
</div>
<% end %>
</div>
Run Code Online (Sandbox Code Playgroud)
它有点呈现为链接,但浏览器不会将其解析为链接.它显示为
Please <a href="/accounts/new">create a new account</a>, after that you will be able to create orders.
Run Code Online (Sandbox Code Playgroud)
生成的HTML:
<div id="main_flash_area">
<div class="alert text-center alert-info">
<a class="close" data-dismiss="alert">× ???????</a>
Please <a href="/accounts/new">create a new account</a>, after that you will be able to create orders.
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如何使其成为正确的链接?我猜它在某些时候会逃脱<a>标签.
nmo*_*ott 13
您需要在视图中使用sanitise闪光灯msg.
<%= sanitize(msg) %>
这将在视图中呈现链接而不是转义html.
请注意,这将适用于您应用中的所有Flash消息.如果您在flash消息中显示任何用户输入,则必须记住在显示之前将其转义,因为Rails自动转义将不适用.
请注意,sanitize帮助程序不太容许raw助手和它可以配置.它可以自动使用链接,script默认情况下会删除标签,如果您的闪存中有用户内容,则会提供一些保护,但您需要进行全面检查以确保不会引入任何安全问题.有关详细信息,请查看Rails文档.