3

我正在使用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

在正常的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條。

+0

BTW:在什麼情況下Ruby on Rails 3.x不處理轉義?有一些嗎?如果是這樣,什麼/什麼時候? – user12882 2012-01-12 01:19:25

+0

那麼,Rails 3.x DOES會處理.erb模板中的任何內容,使用<%= %>輸出,除非字符串已標記爲.htmlsafe。如果您正確使用ActiveRecord,Rails還會處理防止SQL注入的問題。然而,在rails無法處理轉義的情況下,可能存在無數的情況,因爲您可以使用rails做無數的事情,您可以隨心所欲地做任何事情,包括不做任何事情感覺或沒有人做過。其中一些情況,Rails不會處理轉義。 – jrochkind 2012-01-12 05:26:02

+0

你可以給我兩個**極端情況的例子**,其中Ruby on Rails *處理*和*不處理*轉義? – user12882 2012-01-12 14:52:58

相關問題