aboutsummaryrefslogtreecommitdiffstats
path: root/guides/source/i18n.md
diff options
context:
space:
mode:
authordevlin zed <me@devlinzed.com>2014-02-11 10:44:45 -0500
committerdevlin zed <me@devlinzed.com>2014-02-11 10:44:45 -0500
commitec0664a6eb8906fcd31a53a1efad69bdc7fe6f5b (patch)
tree4af90f2225e06ee6269bc3ed894eebcf08992b6b /guides/source/i18n.md
parentb12c1b858ea8a781d221e94e2fc22bf729fe2086 (diff)
downloadrails-ec0664a6eb8906fcd31a53a1efad69bdc7fe6f5b.tar.gz
rails-ec0664a6eb8906fcd31a53a1efad69bdc7fe6f5b.tar.bz2
rails-ec0664a6eb8906fcd31a53a1efad69bdc7fe6f5b.zip
Don't symbolize tainted data.
`I18n.locale=` symbolizes its argument, so passing it `params[:locale]` allows one to DOS your application by visiting `...?locale=` URLS repeatedly, with unique values, until the never-GCed symbols monopolize the available memory.
Diffstat (limited to 'guides/source/i18n.md')
-rw-r--r--guides/source/i18n.md6
1 files changed, 5 insertions, 1 deletions
diff --git a/guides/source/i18n.md b/guides/source/i18n.md
index d72717fa3b..088080721e 100644
--- a/guides/source/i18n.md
+++ b/guides/source/i18n.md
@@ -145,7 +145,11 @@ The _setting part_ is easy. You can set the locale in a `before_action` in the `
before_action :set_locale
def set_locale
- I18n.locale = params[:locale] || I18n.default_locale
+ if %w[en fr].include?(params[:locale])
+ I18n.locale = params[:locale]
+ else
+ I18n.locale = I18n.default_locale
+ end
end
```