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)では、何もする必要はありません。

i18nから返された文字列に一部のHTMLコードまたはJavaScriptが含まれていても、i18nから返された文字列を通常の方法で出力すると、(テンプレートまたは変数からの)HTMLはエスケープされて表示されますウェブページのリテラルソースとして。

i18nから返された文字列をhtml_safeとして手動でマークして、htmlソースとして配信されるようにする必要があります。

だからやってはいけません。

自分で試してみてください。

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

これをERBテンプレートで出力します。何が起こるかを確認してください。

典型的なRailsテンプレートからブラウザに出力する以外に、i18nで何か変なことをしているのであれば、何を言いたいのでしょうか?

私は多分、このガイドは、Railsのセキュリティ問題の概要については、あなたが探しているものだと思う:「注入」の

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

参照セクション8。

+0

ところで:どのような状況でRuby on Rails 3.xはエスケープ処理をしませんか?いくつかありますか?もしそうなら、何時? – user12882

+0

文字列が.htmlsafeでマークされていない限り、Rails 3.xは.erbテンプレート内の何かのエスケープを処理します。<%= %>で出力します。 ActiveRecordを適切に使用している場合、RailsはSQLインジェクションからの保護も処理します。しかし、レールがエスケープ処理をしないケースは潜在的に無数にあります。レールでできることは無限にありますので、何もしないもの感覚や誰も前にやったことはありません。これらの状況の中には、Railsがエスケープ処理をしないものもあります。 – jrochkind

+0

Ruby on Rails *を扱う**極端なケース**とエスケープしない*の2つの例を教えてください。 – user12882

関連する問題