2012-02-05 63 views
0

我正在使用Rails 3和Ruby 1.9.2。我在做任何事情时,我显示我的帖子的内容特别,我只是在做Rails - javascript注入

<%[email protected]%> 

当我添加

"<script language='javascript'>alert('test');</script>" 

到,当然我的帖子的形式,它执行JavaScript警告!

我试图在保存之前和显示之前添加html_safe,但它没有解决任何问题。

如果我必须添加任何安全码,我必须在保存帖子之前或在显示之前添加它吗?我听说Rails 3本身就是这样做的,所以我没有太在意安全性,但我想仍然有一些主要的事情要小心。

+0

这取决于。请告诉我们你的代码。 – SLaks 2012-02-05 19:53:08

+0

我会在几分钟内添加它...... – 2012-02-05 20:15:21

+0

请注意,在这种情况下,您不应该使用'html_safe'。 JavaScript执行** BECAUSE **您正在使用'html_safe'。 'html_safe'的意思是“这个HTML是安全的,所以你不必逃避它。”如果您摆脱了'html_safe'调用,则默认情况下,Rails将负责转义潜在的恶意内容。 – Mischa 2012-02-06 08:31:55

回答

2

Rails 3的是很严格逃避任何事,你把你的观点,但在轨道2与以前它是你的责任,要做到这一点。您可以选择使用h辅助方法来逃避一切:

<%= h(value) %> 

当建立接受任意用户输入您必须肯定你是逃避什么,一切在视图中显示出来的应用程序。

+0

除非OP使用小于2.3.6的Rails版本,否则无论使用Rails 2还是3,都不需要使用h。 – varatis 2012-02-05 23:37:35

+0

需要了解。我认为这是一个2.3.x的东西。 – tadman 2012-02-06 14:35:46

1

您使用的是Rails 3吗? JavaScript的东西应该会自动转义。

但对于预防XSS更多的信息,我只是看Ryan Bates' RailsCasts.