FuelPHPのVerが1.5.1の話題です。
結論から書くとconfig.phpの設定は
'htmlentities_double_encode' => true,
'uri_filter' => array(),
がいいんじゃないかなと思います。
※こうしたときにFieldsetクラスがうまく動かないかもしれないです。
ごめんなさい、試してません。
FuelPHPのhtmlentitiesの第四引数(double_encode)のデフォルトはfalseです。
ちなみにPHPのデフォルトはtrueです。
FuelPHPのソースは以下のようになっています。
\core\classes\security.php
double_encodeの意味は以下の通りです。
何を言っているかというと、double_encodeがtrueの場合は、「&」と入力があったら「&」となりますが、falseの場合は、「&」と入力があったら「&」のままとするということです。
FuelPHPの場合、
<?php echo Form::input('name', Input::post('name')); ?>
のように書いてフォームを出力します。
$_POST['password']の値が「&」だと、本当は「&amp;」として出力しないといけないのに「&」と出力してしまうので、フォームのinputには「&」と表示されてしまいます。
&や>を入力する機会はほぼない気もいたしますが、入力されるケースがある場合、なぜ&と入力した結果が&になってしまうか気がつかないと思います。
FuelPHPのdouble_encodeはconfig.phpで変更可能です。
config.phpのhtmlentities_double_encodeはtrueにした方がいいと思います 。
この変更に伴って
結論から書くとconfig.phpの設定は
'htmlentities_double_encode' => true,
'uri_filter' => array(),
がいいんじゃないかなと思います。
※こうしたときにFieldsetクラスがうまく動かないかもしれないです。
ごめんなさい、試してません。
FuelPHPのhtmlentitiesの第四引数(double_encode)のデフォルトはfalseです。
ちなみにPHPのデフォルトはtrueです。
FuelPHPのソースは以下のようになっています。
\core\classes\security.php
public static function htmlentities($value, $flags = null, $encoding = null, $double_encode = null)
{
static $already_cleaned = array();
is_null($flags) and $flags = \Config::get('security.htmlentities_flags', ENT_QUOTES);
is_null($encoding) and $encoding = \Fuel::$encoding;
is_null($double_encode) and $double_encode = \Config::get('security.htmlentities_double_encode', false);
以下略
以下略
double_encodeの意味は以下の通りです。
double_encode
double_encode
をオフにすると、PHP は既存の html エンティティをエンコードしません。 デフォルトでは、既存のエンティティも含めてすべてを変換します。
何を言っているかというと、double_encodeがtrueの場合は、「&」と入力があったら「&amp;」となりますが、falseの場合は、「&」と入力があったら「&」のままとするということです。
FuelPHPの場合、
<?php echo Form::input('name', Input::post('name')); ?>
のように書いてフォームを出力します。
$_POST['password']の値が「&」だと、本当は「&amp;」として出力しないといけないのに「&」と出力してしまうので、フォームのinputには「&」と表示されてしまいます。
&や>を入力する機会はほぼない気もいたしますが、入力されるケースがある場合、なぜ&と入力した結果が&になってしまうか気がつかないと思います。
FuelPHPのdouble_encodeはconfig.phpで変更可能です。
config.phpのhtmlentities_double_encodeはtrueにした方がいいと思います 。
この変更に伴って
//'uri_filter' => array('htmlentities'),
'uri_filter' => array(),
としないといけません。
FuelPHP でのセキュリティ対策(1) - A Day in Serenity @ kenjisのURI フィルタの記載の通りで、uri_filterにhtmlentitiesを適用されているので、&等を含むURLは自動的にhtmlentitiesが適用されて、コントローラーで受け取った時点で、HTML エンティティに変換されてしまいます。
これをViewに渡すと、htmlentities_double_encodeがtrueの場合、もう1回htmlentitiesが適用されてしまいます。
※FuelPHPの思想は、URLをコントローラーで受け取った時点で、&等がHTML エンティティに変換されているべきだ、ということだと思うのですが、kenjisさんがFuelPHP Forumsで質問しているとおり、私もデフォルトの uri_filter の必要性がわかりません…
としないといけません。
FuelPHP でのセキュリティ対策(1) - A Day in Serenity @ kenjisのURI フィルタの記載の通りで、uri_filterにhtmlentitiesを適用されているので、&等を含むURLは自動的にhtmlentitiesが適用されて、コントローラーで受け取った時点で、HTML エンティティに変換されてしまいます。
これをViewに渡すと、htmlentities_double_encodeがtrueの場合、もう1回htmlentitiesが適用されてしまいます。
※FuelPHPの思想は、URLをコントローラーで受け取った時点で、&等がHTML エンティティに変換されているべきだ、ということだと思うのですが、kenjisさんがFuelPHP Forumsで質問しているとおり、私もデフォルトの uri_filter の必要性がわかりません…