hiki のメモ <2014-12-29 Mon>
hiki を rack で使おうとしたら /?c=admin;conf=hoge などでエラー
Rack::Request
が環境変数の QUERY_STRING を解釈するときにセパレータが & のみになっているため。
https://github.com/rack/rack/blob/master/lib/rack/request.rb#L369
よって、例えばパスが /?c=admin;conf=hoge のときに、key c の値が admin;conf=hoge となってしまっている。本当は key c の値が admin でなければならない。
変更時期はここ?
- Do not truncate POST data on `;`, closes #543 · 71c6911 · rack/rack - https://github.com/rack/rack/commit/71c69113f269f04207157bee6c197b5675f3df61#diff-345b5336fcb3ce47a50decd2176d79e8R331
- Truncation of POST data on semicolon during param processing (unencoding?) · Issue #543 · rack/rack - rack/rack#543
このセミコロンを外すコミットが rack 1.6.0 で取り込まれたため、8日前の bundle update hiki/hiki により rack 1.5.2 から rack 1.6.0 が使われるようになったため発生したと思われる。
ちなみに、W3C はブラウザに対してセミコロンもセパレータにするよう勧告を出している(?)(要確認)
- http://en.wikipedia.org/wiki/Query_string
- http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.2.2
ちなみに、 Rack::Utils.parse_query() ではセパレータ [&;] が使われている。(ディフォルト)
git clone https://github.com/hiki/hiki.git
cd hiki
edit hikiconf.rb # @data_path を 'data' などと変更
bundle install
ruby hiki.rb
open http://0.0.0.0:9292/
そこで例えば「管理」→「基本」や「パスワード」などに行ってみる。 http://0.0.0.0:9292/?c=admin;conf=password
- hiki の段階で query string を & を使うものに変更するか、Rack::Request を変更するなどして解決するか 安直に一旦 gem ‘rack’, “~> 1.5.0” としてしまうとか。
- rack 自体に pull request するか