2016-12-07 6 views
0
class ApplicationController < ActionController::Base 
.... 

    def sanitize(value) 
    ActionController::Base.helpers.sanitize(value.try(:strip)).gsub('&amp;', '&').gsub('&gt;', '>').gsub('&lt;', '<') if value.present? 
    end 

end 

とリソースでレールで強力なパラメータを明示的にサニタイズする必要がありますか?ここ

class UsersController < ApplicationController 
... 
def update 
    if current_user.update(update_users_params) 
    redirect_to root_path 
    end 
end 

private 


def update_users_params 
    params.require(:user).permit(username: sanitize(params[:user] [:username]), 
        location: sanitize(params[:user][:location])) 
end 

場所とユーザー名は、Userモデルの属性です。サニタイズメソッドを使用せずに

実際の行動:

我々はそれが

"Hey <script type='text/javascript'> alert('Hi') </script>" 

であるとして、それが格納されているフォーム送信後、ユーザーフォームのユーザー名または場所の入力フィールドに"Hey <script type='text/javascript'> alert('Hi') </script>"を追加した場合、我々はする必要がありますデータベースに格納する前にスクリプトタグの属性をサニタイズしますか? と

強力なパラメータは、それらの属性からスクリプトタグをサニタイズしませんか?

答えて

0

Railsは入力をそのまま保存しますが、それを使用するときは常にエスケープします。

unsanitized(html/script)文字列の場合は、rawまたはhtml_safeを明示的に呼び出す必要があります。

+0

これは本当ですが、アンドロイドやIOSにサービスを提供するAPIサービスのような他のプラットフォームに保存された結果を提供する必要がある場合はどうでしょうか。 – Jaswinder

+0

あなたはそれをどのように渡すかによって異なります。 'params [:my_param_name]'をAPI /サービスに渡しただけでは、デフォルトでエスケープされます。 – codyeatworld

+0

いいえ、デフォルトではエスケープされません。 – Jaswinder

関連する問題