在我的情况下,我可以/应该做些什么来关心安全性?

时间:2012-01-12 00:23:16

标签: ruby-on-rails ruby ruby-on-rails-3 security internationalization

我正在使用Ruby on Rails 3.1.0,我想关注使用I18n gem进行国际化的安全性。

此时我有:

# in .yml file
key_1_html: "%{var_1} is just a test"

# in view, controller and model files
I18n.t('key_1_html', :var_1 => 'Test variable')

Test variable代表用户的输入,因此我应该将其视为潜在的黑客行为。

在我的情况下,我可以/应该做些什么来关心安全性?

1 个答案:

答案 0 :(得分:0)

在正常的Rails(3.x)用法下,您无需执行任何操作。

即使某些HTML代码或javascript进入从i18n返回的字符串,如果您正在输出以常规方式从i18n返回的字符串,其中的任何HTML(无论是来自模板还是变量)都将被转义并显示为网页中的文字来源。

您必须手动将i18n返回的字符串标记为.html_safe,才能将其作为html源传递。

所以不要这样做。

亲自尝试,看看。

I18n.t('key_1_html', :var_1 => '/<script>danger!</script>')

现在在ERB模板中输出,看看会发生什么。

如果您正在使用i18n做一些奇怪的事情而不是通过典型的Rails模板将其输出到浏览器,那么您需要说出什么,以及您关注的是什么。

我想也许本指南正是您所需要的,有关Rails安全问题的概述:

http://guides.rubyonrails.org/security.html

参见第8节“注射”。