Child pages
  • Шаблоны Template Toolkit
Skip to end of metadata
Go to start of metadata

Экранирование поставляемых данных во избежание XSS-атак

При подстановке в шаблон данных, передаваемых пользователем (например, переданных ранее через форму на сайте), эти данные обязательно экранируются с помощью фильтра html:

[% company_name | html %].

Во избежание атак XSS.

Пробелы

К оформлению кода внутри шаблонов применяются те же самые требования, что и к оформлению кода на Perl. В частности это касается расстановки пробелов (пробелы вокруг операторов, пробелы после запятых, вокруг сложных индексных выражений и т.п.) Например,

[% news = [ { date => '31.12.2007', title => 'Happy new Year' } ] %]
[% FOREACH n = news %]

Лесенка

При использовании логических / блочных конструкций TT данные, внутри блока сдвигаются вправо для улучшения удобочитаемости:

[% IF ru %]
  русский текст
[% ELSE %]
  english text
[% END %]

Проверки на непустоту списков

В случае необходимости отображения списка или таблицы, где строки передаются в виде массива, должна быть проверка на непустоту этого массива и соответствующая адекватная реакция. Например, вместо вывода пустой таблицы или списка лучше вывести пояснительный текст: "Заказы пока отсутствуют" или "Новостей на сегодня нет".

Шаблон должен интерпретироваться без ошибок, даже если отсутствуют необходимые данные

Шаблон должен интерпретироваться без ошибок даже в случае, если требуемые шаблоном переменные не передаются шаблонизатору. Это означает, что в шаблонах должна быть предусмотрена адекватная защита, на случае, если данные не передаются.

Если при обработке шаблона, в случае отсутствия необходимых данных, возникают фатальные ошибки или предупреждения, это не позволяет применять процедуры автоматического тестирования, проверающие валидность всех шаблонов. В частности валидность шаблона нельзя будет в произвольный момент времени проверить с помощью утилит tpage или ttree.

Запрещается использовать имена, которые имеют предопределенное значение

В шаблонах Template Toolkit/Catalyst предопределены имена c, context, template и component.

Кроме того, наша система лэйаутов резервирует для себя имена current_layout, html и content.

Запрещается передавать в контекст шаблонов переменные/методы/etc. с такими именами.

  • No labels