Do not symbolize arbitray locale params

* Validate locale is valid before assigning it
* Don't convert invalid locales to symbols (creates DoS risk)

thanks @brynary
This commit is contained in:
Reinier Balt 2013-05-07 09:29:47 +02:00
parent c6e526127c
commit 78f81ed29f

View file

@ -33,8 +33,12 @@ class ApplicationController < ActionController::Base
locale = params[:locale] # specifying a locale in the request takes precedence
locale = locale || prefs.locale unless current_user.nil? # otherwise, the locale of the currently logged in user takes over
locale = locale || request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first if request.env['HTTP_ACCEPT_LANGUAGE']
I18n.locale = locale.nil? ? I18n.default_locale : (I18n::available_locales.include?(locale.to_sym) ? locale : I18n.default_locale)
# logger.debug("Selected '#{I18n.locale}' as locale")
if locale && I18n::available_locales.map(&:to_s).include?(locale.to_s)
I18n.locale = locale
else
I18n.locale = I18n.default_locale
end
end
def set_session_expiration