Kenji Suzuki
kenji****@gmail*****
2010年 4月 6日 (火) 22:56:36 JST
Kenji です。 On Tue, 06 Apr 2010 21:41:22 +0900 溝口 令雄 <mizog****@gmail*****> wrote: > お世話になっております。溝口です。 > > kunitsuji <tsuji****@m-s*****> さんwrote: > > > これって、FORMで配列で値を受け取った時、ということですか。 > > いえ、set_value() を複数回呼んでいるのは、配列を受け取っている画面では > ありません。別の機能です。 > > このスレッドの最初に、 > > Kenji Suzuki <kenji****@gmail*****> さんwrote: > > > このバグに当たるような実装をすることは少ないと思いますが、 > > とKenji様がおっしゃっているとおり、同じフィールドに対して set_value() > を複数回呼ぶという実装がまずいのかもしれません。 > > ・同一フィールド(パラメータ)に対するset_value()の呼び出しは1回のみ > > とルールを決め、パッチは適用せずに元のまま使い、必要であれば、 > > ---------- > $value = set_value('field_name', $default_value); > ---------- > > と一旦変数に入れて、それを複数回出力するようにした方が安全なのかもしれ > ないです。 > ほぼ初めてCodeIgniterを使用しているので、これがCodeIgniter的に正しい作 > 法なのかどうなのかいまいちよく分からないのですが… バグっているので、CodeIgniter的に正しいもなにもないと思います。 こういうコーディングルールは単なるバグの回避策ですね。 バグが深いみたいですので、修正するには、バグを再現できるサンプルと、 きちんとしたデバッグ作業が必要ですね。 // Kenji > よろしくお願いいたします。 > > __________________________ > _________________________________________/ Original Message > Subj: Re: [Codeigniter-users] 【注意喚起】CodeIgniter 1.7.2 Formヘルパー > の脆弱性 > From: kunitsuji <tsuji****@m-s*****> > To : codei****@lists***** > Cc : -- > Date: 2010/04/06 18:49:52 > > > kunitsujiです。 > > > > これって、FORMで配列で値を受け取った時、ということですか。 > > > > > > >お世話になっております。溝口です。 > > > > > >Kenji Suzuki <kenji****@gmail*****> さんwrote: > > > > > >> となると、この if文自体を削除した方がいいでしょうかね。 > > >> > > >> if (isset($prepped_fields[$field_name])) > > >> { > > >> return $str; > > >> } > > > > > >ここを削除すると確かに前の値は残らなくなりますが、 > > >set_value() を2度呼び出した場合、& が > > >1度目では $amp; > > >2度目では &amp; > > >と変換されるようになります(※)。 > > > > > >パッチ適用時には、※の問題は起こりません。 > > > > > >よろしくお願いいたします。 > > > > > > > > > _________________________ > > > _ > > >_________________________________________/ Original Message > > >Subj: Re: [Codeigniter-users] 【注意喚起】CodeIgniter 1.7.2 Formヘル > > >パー > > >の脆弱性 > > >From: Kenji Suzuki <kenji****@gmail*****> > > >To : codei****@lists***** > > >Cc : -- > > >Date: 2010/04/06 17:09:36 > > > > > >> Kenji です。 > > >> > > >> > > >> On Tue, 06 Apr 2010 15:12:43 +0900 > > >> 溝口 令雄 <mizog****@gmail*****> wrote: > > >> > > >> > Kenji 様 > > >> > > > >> > お世話になっております。溝口です。 > > >> > > > >> > Kenji Suzuki <kenji****@gmail*****> さんwrote: > > >> > > > >> > > CodeIgniter 1.7.2 の Formヘルパー の set_value() で同じフィー > > >> > > ルド > > >> > > を > > >> > > 2回目以上表示すると 2回目以降は文字参照に変換されず XSS脆弱性 > > >> > > にな > > >> > > る > > >> > > 可能性があります。 > > >> > > > > >> > > 詳細 > > >> > > http://d.hatena.ne.jp/Kenji_s/20100316/1268701194 > > >> > > > >> > 上記ページに記載して頂いたパッチを当てたところ、たとえば > > >> > > > >> > ---------- > > >> > <?php foreach ($rows as $idx => $row): ?> > > >> > ...(中略)... > > >> > <?= form_input(array( > > >> > 'name' => F_SORT . '[]', > > >> > 'value' => $row[DBC_SORT], // (A) > > >> > 'size' => '2', > > >> > 'tabindex' => $idx + 1 > > >> > )) . LF ?> > > >> > ...(中略)... > > >> > <?php endforeach; ?> > > >> > ---------- > > >> > > > >> > のようにform_input()関数をループ中で繰り返し呼び出している箇所で、 > > >> > value属性に指定している(A)の値($row[DBC_SORT]の値)が常に$ > > >> > rowsの > > >> > 1番目の要素の値になってしまいました。 > > >> > パッチを元に戻すとこの現象は起こりません。 > > >> > > > >> > これはどのように対処すべきでしょうか? > > >> > > >> なるほど。そうですか。 > > >> > > >> となると、この if文自体を削除した方がいいでしょうかね。 > > >> > > >> if (isset($prepped_fields[$field_name])) > > >> { > > >> return $str; > > >> } > > >> > > >> > > >> // Kenji > > >> > > >> > > >> > よろしくお願いいたします。 > > >> > > > >> > > > >> > _____________________ > > >> > ___ > > >> > __ > > >> > _________________________________________/ Original Message > > >> > Subj: [Codeigniter-users] 【注意喚起】CodeIgniter 1.7.2 Formヘル > > >> > パー > > >> > の > > >> > 脆弱性 > > >> > From: Kenji Suzuki <kenji****@gmail*****> > > >> > To : codei****@lists***** > > >> > Cc : -- > > >> > Date: 2010/03/16 10:07:28 > > >> > > > >> > > Kenji です。 > > >> > > > > >> > > > > >> > > CodeIgniter 1.7.2 の Formヘルパー の set_value() で同じフィー > > >> > > ルド > > >> > > を > > >> > > 2回目以上表示すると 2回目以降は文字参照に変換されず XSS脆弱性 > > >> > > にな > > >> > > る > > >> > > 可能性があります。 > > >> > > > > >> > > 詳細 > > >> > > http://d.hatena.ne.jp/Kenji_s/20100316/1268701194 > > >> > > > > >> > > これ、なかなか修正されないのでバグでないのかも知れませんが。 > > >> > > このバグに当たるような実装をすることは少ないと思いますが、知ら > > >> > > ず > > >> > > に > > >> > > やってしまうと危険ですので、注意喚起しておきます。 > > >> > > > > >> > > > > >> > > 本家では、以下に書き込みがあります。バグだと思われる方は、「バ > > >> > > グ > > >> > > なの > > >> > > で > > >> > > 直してくれ」みたいなことを書き込んでもらえるといいかもしれませ > > >> > > ん。 > > >> > > > > >> > > * http://codeigniter.com/bug_tracker/bug/11284/ > > >> > > * http://codeigniter.com/forums/viewthread/139112/ > > >> > > > > >> > > > > >> > > // Kenji > > >> > > > > >> > > _______________________________________________ > > >> > > Codeigniter-users mailing list > > >> > > Codei****@lists***** > > >> > > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > >> > _______________________________________________________________ > > >> > ___ > > >> > __ > > >> > > > >> > _______________________________________________ > > >> > Codeigniter-users mailing list > > >> > Codei****@lists***** > > >> > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > >> > > >> _______________________________________________ > > >> Codeigniter-users mailing list > > >> Codei****@lists***** > > >> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > >___________________________________________________________________ > > >_ > > > > > >_______________________________________________ > > >Codeigniter-users mailing list > > >Codei****@lists***** > > >http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > > > _______________________________________________ > > Codeigniter-users mailing list > > Codei****@lists***** > > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > ____________________________________________________________________ > > _______________________________________________ > Codeigniter-users mailing list > Codei****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users