From tateishi.katsuyuki @ oss.ntt.co.jp Wed May 19 17:11:56 2010 From: tateishi.katsuyuki @ oss.ntt.co.jp (TATEISHI Katsuyuki) Date: Wed, 19 May 2010 17:11:56 +0900 (JST) Subject: [Ultramonkey-l7-develop 596] Re: =?iso-2022-jp?b?bDd2c2QgGyRCJE4bKEIgWC1Gb3J3YXJkZWQtRm9yIA==?= =?iso-2022-jp?b?GyRCSVUyQzUhRz0kTklUNnE5Z0pzOXAbKEI=?= In-Reply-To: <4B79ECB5.1040601@nttcom.co.jp> References: <6d0a157f1002150703r32d906cfud0bd92d241dd2d36@mail.gmail.com> <4B79ECB5.1040601@nttcom.co.jp> Message-ID: <20100519.171156.779201810222140704.tateishi.katsuyuki@oss.ntt.co.jp> 田沼さま、 立石です。お疲れさまです。 下記の X-Forwarded-For 付加機能の不具合ってどうしましょうか。 私は選択肢としては 1. v2系でちゃんと直す。 2. X-Forwarded-For 付加機能は v2 では非推奨(使用するかどうか はリスクについて理解してもらったうえでユーザに任せる)と し、修正は行わない。 3. 他に意見があれば... くらいかなと思っていて、しかも1をする(まともに直す)ためには 大掛かりな変更が必要になるという認識であり、事実上2かなぁとい う状況だと思っています。 ご意見をお聞かせください。 あるいは何か進展があるようであれば情報共有をお願いします。 -- TATEISHI Katsuyuki Hideaki KONDO -san wrote: > > 田沼さん、立石さん、竹林さん > > お疲れ様です。 > 近藤です。 > > X-Forwarded-For対応における過去バージョンの不具合等 > 調査および詳細に状況報告頂き、有難うございました。 > > 最終的には田沼さんの報告で状況を理解致しました。 > 結果的には、立石さんが報告された不具合が該当するのは > やはり Ver.2.1.3-0 のみということで了解致しました。 > > 但し、過去のバージョンであっても別の不具合が内在して > いたり、X-Forwarded-For機能が効かなかったりという > 問題もあるため、2.1.3-0を含めこれまでのバージョンでも > X-Forwarded-For利用は避けた方がよいということで理解 > 致しました。 > > どうしても利用したいケースでは、不具合内容を分かった上で、 > 利用されるシステムや環境において当該不具合の発生条件に > 該当しないと明確に把握できるような場合に、ユーザ側の判断と > リスクのもとに使ってもらうということになりますね。 > > お忙しい中、調査いただき有難うございました。 > > > Kohei TANUMA さんは書きました: >> 田沼です。 >> >> 最初に不具合について補足しておきますが、 >> クライアントを普通のブラウザと想定した場合にこの不具合が起きるのは >> POSTデータをバイナリでそのまま送るとき >> (form タグに enctype="multipart/form-data" を指定する等)だけで、 >> それ以外の場合は CRLF や SP が URL エンコード(パーセントエンコード) >> されるのでこの事象は起きません。(立石さんのあげた正規表現にマッチしないので) >> 一般的にファイルを送信するようなコンテンツ以外ではまず大丈夫なはずです。 >> >> 実装については昔からあまり変わってないです。 >> 挿入場所はパケットの最初にある HTTP リクエストラインの直後に >> なっていてプロトコルモジュールのクライアントデータを処理する関数で >> 行っています。(analyze_cldata()、昔は match_cldata()) >> >> それで、この関数を呼ぶタイミングですが、 >> 当初はクライアントからコネクションが張られた後の >> 最初のパケットに対してだけ呼ばれていたのでこの問題は >> 起きていなかったはずです。(バージョン不明) >> ただし、この場合は KeepAlive 時に最初のリクエストのみに >> X-Forwarded-For が入り、2番目以降のリクエストはそのままに >> なるという問題がありました。 >> >> その後、sessionless や ip モジュールでコネクション後に >> 即 RealServer へつなげるように変更した際に >> パケット受信前に関数を呼ぶことになったので >> X-Forwarded-For が挿入されなくなりこの機能が壊れました。 >> (バージョン 2.1.1-0 から) >> >> その後にバージョン 2.1.3-0 で修正する際に >> クライアントからのパケット全てに対してこの関数を >> 呼ぶように変更したので、KeepAlive 時も全てのリクエストに >> X-Forwarded-For が追加されるようになったのですが、 >> POST データ内に HTTP リクエストっぽい文字列があり、 >> さらにその文字列がパケットの最初に来た場合に >> この不具合が起きるようになりました。 >> >> ※ もしかしたら実装の順番がちょっと違うかもしれません >> >> ということで、まとめると現在は >> ・クライアントからのパケット全てを検査 >> ・パケットの最初に HTTP リクエストラインがある場合のみ挿入 >> という処理になっています。 >> >> 察しのいい方はわかるかと思いますが >> パイプライン時には 2 番目以降のリクエストに挿入されない >> という不具合も未確認ですがあるはずです。 >> >> 対処としては、HTTP リクエストをちゃんとパースして >> Content-Length を使ったりしてリクエストの切れ目を >> 内部で把握して、ちゃんと正しい位置に挿入するような >> 改修を行う必要があります。 >> そうすればパイプラインでも問題なくなります。 >> >> >> 2010年2月15日20:37 Shinya TAKEBAYASHI : >>> 竹林です. >>> >>> >>>> X-Forwarded-For はオプションだけ残っていたけど長い間壊れてい >>>> て、2.1.3-0リリース前に実装しなおした、という経緯だったはずで >>>> す。したがって今回報告した不具合に合致するのは 2.1.3-0 のみで >>>> す。 >>>> >>>> なお、 >>>> >>>> 1. 2.1.3-0より前の段階で、どのバージョンから壊れていたのか >>>> 2. 昔の(壊れる前の)実装方法 >>>> >>>> については未調査です。 >>> changeset 8e738ee576b39b5d149324c96a0fca0a06fc20ed にて >>> X-Forwarded-For の修正がなされている旨のコミットログが >>> 記録されていますが,実際の diff をみたところ,timeout の修正と >>> tcps 関連のパージ程度しか変更点が見当たりませんでした. >>> >>> >>> 実際にはどんな修正だったのでしょうか. > 田沼 さん >>> >>> ----------------------------------------------------------- >>> Shinya TAKEBAYASHI >>> >>> E-mail: takebayashi.shinya @ oss.ntt.co.jp >>> GPG ID: 395EFCE8 >>> GPG FP: 58B2 B5D0 A692 1BD8 328B E31E E027 AC35 395E FCE8 >>> ----------------------------------------------------------- >> > > -- > Hideaki Kondo > > _______________________________________________ > Ultramonkey-l7-develop mailing list > Ultramonkey-l7-develop @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-develop