Forum: Ruby-dev [ruby-trunk - Bug #9045][Open] URIに含まれるエンコードされたID/パスワードがデコードされない

3e81de78ea84508f617c40b6e3926462?d=identicon&s=25 vmi (Motonori IWAMURO) (Guest)
on 2013-10-23 08:38
(Received via mailing list)
Issue #9045 has been reported by vmi (Motonori IWAMURO).

----------------------------------------
Bug #9045: URIに含まれるエンコードされたID/パスワードがデコードされない
https://bugs.ruby-lang.org/issues/9045

Author: vmi (Motonori IWAMURO)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:
ruby -v: 1.9.3p448
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


URI(プロキシ設定も含む)にID/パスワードを含めるとき、IDやパスワードに「@」や「:」等がある場合はURIエンコードする必要がありますが、uriライブラリがこれをデコードしてくれません。
そのため、認証プロキシでIDに「@」が含まれていると認証に失敗するなどの問題が生じます。

ソースを追っかけて uri/generic.rb
の問題だろうというところまでは調べたのですが、user/passwordを取り扱う部分がたくさんあるので、何処でエンコード/デコードすればいいのかよくわからない状況です。

とりあえず手元ではdef user と def password に URI.decode_www_form_component
を突っ込んでますが、たぶんこれでは片手落ちと思われます。
3e81de78ea84508f617c40b6e3926462?d=identicon&s=25 vmi (Motonori IWAMURO) (Guest)
on 2013-10-23 10:29
(Received via mailing list)
Issue #9045 has been updated by vmi (Motonori IWAMURO).


追記。
#8979 のそもそもの原因はこれだと思うのですが、あっちは rubygems の方直してるんですね……。
(こちらもgemが通らなくて調べてたのですが)
利用側でデコードするのと、提供側でデコードするのと、どちらが適切なんでしょう?
----------------------------------------
Bug #9045: URIに含まれるエンコードされたID/パスワードがデコードされない
https://bugs.ruby-lang.org/issues/9045#change-42562

Author: vmi (Motonori IWAMURO)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:
ruby -v: 1.9.3p448
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


URI(プロキシ設定も含む)にID/パスワードを含めるとき、IDやパスワードに「@」や「:」等がある場合はURIエンコードする必要がありますが、uriライブラリがこれをデコードしてくれません。
そのため、認証プロキシでIDに「@」が含まれていると認証に失敗するなどの問題が生じます。

ソースを追っかけて uri/generic.rb
の問題だろうというところまでは調べたのですが、user/passwordを取り扱う部分がたくさんあるので、何処でエンコード/デコードすればいいのかよくわからない状況です。

とりあえず手元ではdef user と def password に URI.decode_www_form_component
を突っ込んでますが、たぶんこれでは片手落ちと思われます。
C4f076f658dd3464f1d8785ad53a0d99?d=identicon&s=25 sorah (Shota Fukumori) (Guest)
on 2013-10-23 12:20
(Received via mailing list)
Issue #9045 has been updated by sorah (Shota Fukumori).

Status changed from Open to Assigned
Assignee set to akira (akira yamada)

他のメソッドもデコードしてくれる訳じゃないですしuser/passだけ特別扱いというのはどうも。

>> URI.parse('http://example.com/%2F').path
=> "/%2F"


----------------------------------------
Bug #9045: URIに含まれるエンコードされたID/パスワードがデコードされない
https://bugs.ruby-lang.org/issues/9045#change-42564

Author: vmi (Motonori IWAMURO)
Status: Assigned
Priority: Normal
Assignee: akira (akira yamada)
Category: lib
Target version:
ruby -v: 1.9.3p448
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


URI(プロキシ設定も含む)にID/パスワードを含めるとき、IDやパスワードに「@」や「:」等がある場合はURIエンコードする必要がありますが、uriライブラリがこれをデコードしてくれません。
そのため、認証プロキシでIDに「@」が含まれていると認証に失敗するなどの問題が生じます。

ソースを追っかけて uri/generic.rb
の問題だろうというところまでは調べたのですが、user/passwordを取り扱う部分がたくさんあるので、何処でエンコード/デコードすればいいのかよくわからない状況です。

とりあえず手元ではdef user と def password に URI.decode_www_form_component
を突っ込んでますが、たぶんこれでは片手落ちと思われます。
B8eb72801a871e8c08602c482733efdc?d=identicon&s=25 SATOH Fumiyasu (Guest)
on 2013-10-23 15:34
(Received via mailing list)
At Wed, 23 Oct 2013 19:19:45 +0900,
sorah (Shota Fukumori) wrote:
> 他のメソッドもデコードしてくれる訳じゃないですしuser/passだけ特別扱いというのはどうも。
>
> >> URI.parse('http://example.com/%2F').path
> => "/%2F"

URI::Component というクラスを作っている者です。

  http://rubygems.org/gems/uri-component

現状、ドキュメントなしでテスト・実績も不十分ですが、
こんな感じ↓に使えます。ご参考まで。

require "uri/component"

URI::Component.mixin

u=URI.parse("http://alice:p%40s%25sword@example.com/dir%2Fname/...)
p u.userinfo_component.user
# => "alice"
p u.userinfo_component.password
# => "p@s%sword"
p u.path_component.nodes
# => ["dir/name", "subdir"]
p u.query_component['foo']
# => ["bar@example.com"]
p u.query_component.params
# => {"foo"=>["bar@example.com"]}
3e81de78ea84508f617c40b6e3926462?d=identicon&s=25 vmi (Motonori IWAMURO) (Guest)
on 2013-10-24 04:34
(Received via mailing list)
Issue #9045 has been updated by vmi (Motonori IWAMURO).


>>sorah
> 他のメソッドもデコードしてくれる訳じゃないですしuser/passだけ特別扱いというのはどうも。

とは言え、サーバ側が良きにはからってくれるpath等と違ってuser/passwordは完全一致でないと許されないので、逆に特別扱いすべき、とも考えられます。

落とし所は以下のどれかでしょうか。

(1) 制約事項をドキュメントに明記し、現行のままいじらない。(下手にいじると #8979 みたいなケースと衝突しそうだし)
(2) URIエンコード/デコードするためのスイッチをインスタンス変数orメソッド引数に組み込む。(新規で使う場合は無駄に手間がかかる)
(3)
setter/getterやらuserinfoとのやりとりやらURIのエンコード/デコードやらをきっちり追いかけて、正確な値を設定/取得できるよう考慮したパッチを作成する。(パッチの前後で仕様が変わるので、複数の処理系をサポートしているプログラムだと対応が面倒かも)

>>fumiyas

新規で使う場合は良いですね。ただ、今回の件はそもそもgemが動かないことが切っ掛けだったので……。
----------------------------------------
Bug #9045: URIに含まれるエンコードされたID/パスワードがデコードされない
https://bugs.ruby-lang.org/issues/9045#change-42588

Author: vmi (Motonori IWAMURO)
Status: Assigned
Priority: Normal
Assignee: akira (akira yamada)
Category: lib
Target version:
ruby -v: 1.9.3p448
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


URI(プロキシ設定も含む)にID/パスワードを含めるとき、IDやパスワードに「@」や「:」等がある場合はURIエンコードする必要がありますが、uriライブラリがこれをデコードしてくれません。
そのため、認証プロキシでIDに「@」が含まれていると認証に失敗するなどの問題が生じます。

ソースを追っかけて uri/generic.rb
の問題だろうというところまでは調べたのですが、user/passwordを取り扱う部分がたくさんあるので、何処でエンコード/デコードすればいいのかよくわからない状況です。

とりあえず手元ではdef user と def password に URI.decode_www_form_component
を突っ込んでますが、たぶんこれでは片手落ちと思われます。
This topic is locked and can not be replied to.