Я вот про эту дисcкусию: http://www.php.ru/forum/viewtopic.php?t=11616 Там про "ленивое" копирование речь шла
я имел в виду если вызвать шаблон напрямую в строке адреса, а не через include то он исполняться не будет, а превратится просто в текст.
[vs] я не понимаю, что вы хотите сказать... шаблонизаторы обычно вырезают php теги из шаблонов. Пример выше. да и шаблон то не инклудится на прямую, а инклудится обработанный вариант (скомпилированный)
Awilum Т.е. ты хочешь сказать, что твой шаблонизатор вырежет <? и ?>? А если у меня документе - XML? Он испортится. А если не вырежет, то php-код между этими дескрипторами будет выполнен, потому что на любом хостинге включены short tags.
Ничего у меня не вырежет. Я этой цели не добивался: запретить навсегда php в шаблоне. Но в других шаблонизаторах это реализовано.
отлично, вырезаем все теги php и приводим шаблон к стандарту шаблонов. еще лучше экранируем первый вход на HTML: <? php -- НЕТ, скрипты шаблона -- ДА
"<?" и "?>" - это общие для PHP и XML дескрипторы. Типичная ситуация - отправка XML на сервер из джаваскрипта: HTML: <script> function sendRequest(id) { var body = ' <?xml version="1.0"?> <user> <id>'+id+'</id> </user>'; .... } </script> если твой шабонизатор что-то сделает с дескрипторами, этот скрипт сломается.
и сохраняем закрывающий ?> - в eval это вызовет синтаксическую ошибку, в include - последующая часть скомпилированного шаблона отобразится просто текстом.
Код (Text): //xml substitution $template_code = preg_replace( "/\<\?xml(.*?)\?\>/", "##XML\\1XML##", $template_code ); //disable php tag $template_code = preg_replace( array("/\<\?/","/\?\>/"), array("<?","?>"), $template_code ); //xml re-substitution $template_code = preg_replace( "/\#\#XML(.*?)XML\#\#/", "<?php echo '<?xml' . stripslashes('\\1') . '?>'; ?>", $template_code );
Если шаблон выполнется нативно, избежать php-инъекции невозможно. Поэтому такие шаблоны не подходят для систем, где к шаблонам имеют доступ все кто попало.
ничо не вырезать , адекватный человек не будет мешать php с template-script-xhtml компиляция шаблона устранит все проблемы если речь пошла об инъекциях, то можно посмотреть как эта проблема решена с MYSQL запросами , а имеено функция mysql_real_escape_string тоже можно сделать и для шаблона, функцию которая будет экранировать все php скобки и я не совсем понял где инъекция то будет? конструкция в eval является логическо-интерпретируемой, а не статично-текстовой , что исключает инъекции внутри переменных
Это неплохое решение, но неоднозначное. "<?" может использоваться для каких-нибудь операций, в том же javascript могут юзаться регулярные выражения. И получается что шаблонизатор изменяет строки, которые к нему прямо не относятся.
нереализуемо . так как к шаблону нет доступа как и ко всем файлам php которые на сервере. инъекции нет.
Alex_pac значит я просто не понял суть =) Но не вижу ничего плохого в том, чтобы генерировать javascript или xml с помощью шаблонов.
TCodes 1.0.4 + Возможность отключить php для шаблонов. $allow_php_tag = false; + Новый tcode {php:[ code here... ]}
TCodes 1.0.5 + Новый tcode {:$var} - короткое echo + Новый tcode {run:function()} + пофиксина регулярка...
Тут подумал как все такие лучше ? $tpl -> assign('name',$username); $tpl -> template($template); или $vars['name'] = $usetname; $tpl -> template($template, $vars); В CI сделано как во втором варианте. Я привык, удобно.. Может в первом способе есть какой то профит ?