[Codeigniter-users] 【注意喚起】CodeIgniter 1.7.2 Formヘルパーの脆弱性

Back to archive index

Kenji Suzuki kenji****@gmail*****
2010年 6月 13日 (日) 18:00:23 JST


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番目の要素の値になってしまいました。
> パッチを元に戻すとこの現象は起こりません。
> 
> これはどのように対処すべきでしょうか?

helpers/form_helper.php を

if (isset($prepped_fields[$field_name]))
{
	return htmlspecialchars($str, ENT_QUOTES);
}

に変更で、いけるんじゃないでしょうか。



// Kenji




Codeigniter-users メーリングリストの案内
Back to archive index