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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Anchor
Отправлено: 30 Мая, 2014 - 13:19:46
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Всех приветствую!

Есть папка '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'; <тут какой-то вредоносный код>";
 
 Top
Ch_chov
Отправлено: 30 Мая, 2014 - 13:36:05
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Anchor пишет:
А если $module будет содержать строку произвольного РНР кода, есть ли вероятность что он здесь выполнится?


http://goo[dot]gl/v0Gj9Q

Если модули это классы, то автозагрузка классов тоже хороший вариант.

(Отредактировано автором: 30 Мая, 2014 - 13:37:19)

 
 Top
Anchor
Отправлено: 30 Мая, 2014 - 13:39:44
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Ch_chov пишет:
Если модули это классы, то автозагрузка классов тоже хороший вариант.

Не у меня не классы. Там процедурный код. Но возьму на заметку, на будущее.
 
 Top
Ch_chov
Отправлено: 30 Мая, 2014 - 13:42:16
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




В вики описаны способы безопасного подключения файлов.
 
 Top
Anchor
Отправлено: 30 Мая, 2014 - 13:43:58
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




вики:
Цитата:

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


Я тоже к такому варианту склонялся. Сканировать папку modules, собрать имена подпапок в массив, проверять вхождение в этот массив $module . Но наверно более долгая операция, т.к. + обращение к файл. системе. Хотя хз
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB