これ面白かったので紹介。
Rack/Ruby on Rails: ArgumentError: invalid byte sequence in UTF-8 | Running with Rails - Dev Blog not only for Rails fanatics!
RailsアプリケーションのURLにこのパラメータ=>?%28t%B3odei%29をつけるとエラーになることがあるよということらしいです。セキュリティのような大きな問題にはつながらないはず。変なリクエストをされると場合によっては500が返るよってことでしょうか。
元記事を読むと基本的にはRails4のバグっぽい?ですね。Rails3で作ったサービスでは起こりませんでした。くれぐれもRailsで動いていると思われるサービスで試さないように。
このバグを踏んでいる場合は、Rackミドルウェアを書いてパラメータをちょっといじれば回避できるようになります。多分置き場所はapp/middleware/sanitizer.rbとかで大丈夫です。
1class Utf8Sanitizer
2 SANITIZE_ENV_KEYS = %w(
3 HTTP_REFERER
4 PATH_INFO
5 REQUEST_URI
6 REQUEST_PATH
7 QUERY_STRING
8 )
9
10 def initialize(app)
11 @app = app
12 end
13
14 def call(env)
15 SANITIZE_ENV_KEYS.each do |key|
16 string = env[key].to_s
17 valid = URI.decode(string).force_encoding('UTF-8').valid_encoding?
18 # Don't accept requests with invalid byte sequence
19 return [ 400, { }, [ 'Bad request' ] ] unless valid
20 end
21
22 @app.call(env)
23 end
24end
で、上のミドルウェアを使うようにすれば一応リクエストが悪いよーということで返すことができるようになるわけです。
1# in config/application.rb
2module AppName
3 class Application < Rails::Application
4 config.middleware.use "Utf8Sanitizer"
5 end
6end