我正在使用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
代表用户的输入,因此我应该将其视为潜在的黑客行为。
在我的情况下,我可以/应该做些什么来关心安全性?
答案 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节“注射”。