Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Динамические инклуды. Кто как реализует?
Форумы портала PHP.SU » » Вопросы новичков » Динамические инклуды. Кто как реализует?

Страниц (1): [1]
 

1. Anchor - 30 Мая, 2014 - 13:19:46 - перейти к сообщению
Всех приветствую!

Есть папка 'modules'. В ней подпапки модулей 'myModule1/' , 'myModule2/', etc. В зависимости от параметра $_GET['module'] загружается соответствующий модуль. Имя параметра - совпадает с папкой модуля.

Писать просто include 'modules/'.$module.'/index.php'; Как я понимаю не безопасно. Верно?

1) Вариантов подключения с валидацией - в принципе много. Вопрос - как сами реализуете подобное?

2) Стеснялся задать тупой вопрос=) Но все же, для параноика.. Каким образом работают ф-ии/языковые конструкции в РНР? Т.е. здесь - include 'modules/'.$module.'/index.php' Мне нужно беспокоится только за тот случай, если в качестве строки $module окажется путь к другому файлу, так? А если $module будет содержать строку произвольного РНР кода, есть ли вероятность что он здесь выполнится? В include, или напр в ф-ии file_exists('modules/'.$module.'/index.php') ? Напр. $module = "myfile.php'; <тут какой-то вредоносный код>";
2. Ch_chov - 30 Мая, 2014 - 13:36:05 - перейти к сообщению
Anchor пишет:
А если $module будет содержать строку произвольного РНР кода, есть ли вероятность что он здесь выполнится?


http://goo[dot]gl/v0Gj9Q

Если модули это классы, то автозагрузка классов тоже хороший вариант.
3. Anchor - 30 Мая, 2014 - 13:39:44 - перейти к сообщению
Ch_chov пишет:
Если модули это классы, то автозагрузка классов тоже хороший вариант.

Не у меня не классы. Там процедурный код. Но возьму на заметку, на будущее.
4. Ch_chov - 30 Мая, 2014 - 13:42:16 - перейти к сообщению
В вики описаны способы безопасного подключения файлов.
5. Anchor - 30 Мая, 2014 - 13:43:58 - перейти к сообщению
вики:
Цитата:

Проверять, что $module присвоено одно из допустимых значений:
<?
...
$module = $_GET['module'];
$arr = array('main', 'about', 'links', 'forum');
if (!in_array($module,$arr)) $module = $arr[0];
include $module . '.php';
...
?>
Этот способ является более эффективным, красивым и аккуратным.


Я тоже к такому варианту склонялся. Сканировать папку modules, собрать имена подпапок в массив, проверять вхождение в этот массив $module . Но наверно более долгая операция, т.к. + обращение к файл. системе. Хотя хз

 

Powered by ExBB FM 1.0 RC1