溝口 令雄
mizog****@gmail*****
2010年 4月 7日 (水) 12:28:06 JST
お世話になっております。溝口です。 Kenji Suzuki <kenji****@gmail*****> さんwrote: > バグっているので、CodeIgniter的に正しいもなにもないと思います。 > こういうコーディングルールは単なるバグの回避策ですね。 なるほど、そうですよね。 ではとりあえず将来的にバグが修正される事を期待しつつ、 現段階では、form_prep()関数を下記のように書き換えて 使用を続けてみたいと思います。テスト不十分ですが… ---------- function form_prep($str = '', $field_name = '') { // if the field name is an array we do this recursively if (is_array($str)) { foreach ($str as $key => $val) { $str[$key] = form_prep($val); } return $str; } if ($str === '') { return ''; } $pairs = array_merge( array_flip(get_html_translation_table(HTML_SPECIALCHARS)), array("'" => "'", """ => '"') ); $str = strtr($str, $pairs); $str = htmlspecialchars($str); // In case htmlspecialchars misses these. $str = str_replace(array("'", '"'), array("'", """), $str) ; return $str; } ---------- よろしくお願いいたします。 __________________________ _________________________________________/ Original Message Subj: Re: [Codeigniter-users] 【注意喚起】CodeIgniter 1.7.2 Formヘルパー の脆弱性 From: Kenji Suzuki <kenji****@gmail*****> To : codei****@lists***** Cc : -- Date: 2010/04/06 22:56:36 > 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 > > _______________________________________________ > Codeigniter-users mailing list > Codei****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users ____________________________________________________________________