我读过http://yehudakatz.com/2010/02/01/safebuffers-and-rails-3-0/和http://asciicasts.com/episodes/204-xss-protection-in-rails-3,我很困惑。我已经尝试了在asciicasts关于转义的解决方案,然后键入内容为html_safe。我不知道我做错了什么。
我使用的是WYSIWYG编辑器,它使用Content更新Post。
def create
@post = Post.new(params[:post])
respond_to do |format|
if @post.save
format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
else
format.html { render :action => "new" }
end
end
结束非常新颖。现在,当我输入一些内容时,例如<p>hello, world</p>
",那个确切的字符串出现在我的视图中(我使用的是partial, fwiw)。
<%= scrub post.content %>
我的application_helper。Rb文件有这个方法:
def scrub(content)
"<strong>#{h(content)}</strong>".html_safe
end
当我输入" <script>mal</script>
"时,将转义脚本。为什么HTML会显示在视图上?下面是它在视图中的样子:
<p>hello, world <script>mal</script></p>
谁能给我指个正确的方向?我想让用户做简单的内容格式化,网站将显示呈现的HTML(像这个网站),但保持自己安全的脚本。
听起来您可能想看看sanitize,它有三种内置模式,并且是可定制的。
试着把.html_safe放在它的末尾。当我为自己寻找解决方案时,我找到了这个答案。(对不起,我意识到这是一个老问题。但对其他人来说)
Rails 4 WYSIWYG Bootsy不显示格式