Нативный php.Что за этим стоит?

Печать RSS
471


Господин ПЖ
0
если $name приходит от пользователя там могут быть символы типа ../../test.php и символ нулевого байта то есть по сути сработает конструкция типа include '../../test.php'; а не include '../../test.php.phtml'; как ты того будешь ожидать
поэтому или список или регулярное выражение
А

Оранжевые штаны
0
7. lolpetyaz, а речь не шла о пользовательских переменных, данных.
S

Пришелец
0
Правильно говорят все для таких вещей используют шаблонизатор,

Зачем писать Слова или HTML тэги в классах или в функциях если это можно сделать в одной отделом файле

Добавлено через 01:15 сек.
Я к примеру всегда пользовался Twig очень понятный и отличный Шаблонизатор
Изменил: Shamsik (31.07.2015 / 19:54)
L
Автор
Пришелец
0
14. Shamsik, причем тут tpl шаблонизатор к нативноому php?Я тоже пользовался smarty и писал класс свого небольшого шаблонизатора для tpl,яя немогу понять как мне работать с нативным php и еще если с ним разобраться то никакие шаблонизаторы не дадут тебе такую скорость работы!Только вот надо понять все доконца)

Добавлено через 01:11 сек.
13. Башка, ну а что ты скажешь насчет этого?пользовательских переменных?

Пацак
0
15. lolpetyaz, просто фильтруй переменные которые поступают от пользователя (желательно учитывая тип) и проблем не будет.
Ну и как-то проверяй, что инклудиться будет именно нужный файл. (у меня например кэшируется список шаблонов, если подключаемого шаблона нет в списке, то он не подключится)
Изменил: /7o/loTeH4I1k (31.07.2015 / 21:47)
L
Автор
Пришелец
0
anonymouse (31 Июля 2015 / 21:46)
15. lolpetyaz, просто фильтруй переменные которые поступают от пользователя (желательно учитывая тип) и проблем не будет.
Ну и как-то проверяй, что инклудиться будет именно нужный файл. (у меня например кэшируется список шаблонов, если подключаемого шаблона нет в списке, то он не подключится)
Тоесть так будет все гуд?
<?php 

function new_view($name,$data = null) {
	if(file_exists($_SERVER['DOCUMENT_ROOT'].'/Views/'.$name.'.phtml')) {
		require($_SERVER['DOCUMENT_ROOT'].'/Views/'.$name.'.phtml');
	}else{
		throw new Exception('blalalal');
	}
}

$data['title'] = 'title';

$counter = $db->query('SELECT * FROM `users`')->fetch();
$data['user_id'] = $counter['id'];

new_view('test');
И вот файл test.phtml
<html>
	<head>
		<title><?=$data['title']?></title>
	</head>
<body>
   <big><?=$data['user_id']?></big>
</body>
</html>

Обьясни тогда,что под словом "Фильрируй "ты имел ввиду?а еще лучше покажи на этом примере)
Изменил: lolpetyaz (31.07.2015 / 23:20)

Пацак
0
Ну смотри, условно имеется список темплейтов (или модулей, библиотек, чего угодно)
<?php
$tpls=array('head', 'foot', 'menu');
?>
В функции мы проверяем имеется ли подключаемый модуль в списке (тут я использую global, но вообще список должен получаться в самой функции, читаться из файлика или xcache например)
<?php
function new_view($name,$data = null) {
    global $tpls; // тут должно быть получение кэшированного списка
    if(in_array($name, $tpls)) { 
        require($_SERVER['DOCUMENT_ROOT'].'/Views/'.$name.'.phtml'); 
    }else{ 
        throw new Exception('blalalal'); 
    } 
}
?> 
Изменил: /7o/loTeH4I1k (01.08.2015 / 10:05)
А

Оранжевые штаны
0
14. lolpetyaz, ну пользовательские переменные надо фильтровать. Чти Вантуза, он писал уже о проблемах, которые могут возникать. Я мало представляю себе шаблонизатор, который на прямую берет адрес и использует его для загрузки шаблона. Обычно это делается через роутер, а роутер уже использует всякие регулярки и т.п.
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск