1

Тема: [решен] Экранирование массивов при выводе в темплейте

Я думал при настройке escaping_strategy: on экранируются не только обычные переменные, но и элементы массивов, оказалось нет:

$this->mas = array("<sсript>alert('xss')</sсript>" => "<sсript>alert('xss')</sсript>");
<?php print_r($mas); ?>
<?php foreach ($mas as $key=>$value): ?>
  <?php echo $key.' '.$value; ?>
<?php endforeach; ?>
sfOutputEscaperArrayDecorator Object
(
    [count:private] => 
    [value:protected] => Array
        (
            [<sсript>alert('xss')</sсript>] => <sсript>alert('xss')</sсript>
        )

    [escapingMethod:protected] => esc_entities
)

<sсript>alert('xss')</sсript> &lt;sсript&gt;alert(&#039;xss&#039;)&lt;/sсript&gt; 

Как сделать, чтобы элементы массивов тоже экранировались по умолчанию?

2 Отредактировано relo_san (2010-07-19 09:16:21)

Re: [решен] Экранирование массивов при выводе в темплейте

Что вы конкретно подразумеваете под выражением "элементы массивов"? Ключи? Зачем?
И главное - как вы будете обращаться к таким ключам в шаблоне, если они будут экранироваться?
Значения в массивах экранируются нормально, вне зависимости от вложенности.

Если вы совершенно не в курсе, что за массив к вам пришел и хотите себя полностью обезопасить - напишите конкретно для этого массива экранирование с ключами. Или воспользуйтесь http://trac.symfony-project.org/ticket/6939

3 Отредактировано Jurchik (2010-07-19 09:25:32)

Re: [решен] Экранирование массивов при выводе в темплейте

Да, я хотел чтобы в темплейте выводились и ключи и значения массива, обходились через foreach и при выводе экранировались. Ключи ассоциативного массива - названия некоторой сущности, а значения - ее свойства.
Видимо придется ключами делать таки числовые идентфикаторы...
Спасибо за ссылку