Вот у нас некий скрипт появился терь надо научиться его юзать: <?php include(\$name) ?> Он нам необходим для того чтобы можно было вот такое к примеру открыть и вывести: http://www.someserver.com/path/index.ph ... urpage.htm Как это реализовать?
думаю, что совсем не факт, что если при вызове идет ?name=mypage.html внутри все устроено именно так. 8) скорей всего выполняется поиск по базе и страница генерируется исходя из найденного контента по запросу, а не так вот тупо через include() подсунут вам что-нить типа ?name=/etc/password и будет вам счастьн ...
фрагмент который я написал год назад вполне защищает от подобных фишек (конечно можно написать и в 10 раз проще, но сейчас речь не совсем об этом) Код (Text): $mode = 'default'; if ( isset($_GET['mode']) ) { if ( !empty($_GET['mode']) ) { if ( !preg_match("#[^a-z]#s", $_GET['mode']) ) { $mode = $_GET['mode']; } } } $filename = 'modules/module_' . $mode . '.php'; if ( file_exists($filename) ) { include $filename; } else { include 'includes/error.php'; }
я бы еще включения делал от $DOCUMENT_ROOT. 8) + включаемые файлы сделал *.inc и запретил их показ через апач.
Это всё лишнее, достаточно, чтобы х.php файлы модулей ничего не делали при прямом их вызове. А функциональность их вызывалась движком по средством создания и использования соответствующих объектов или процедур содержащихся в этом файле.
Поздравляю! Наверно это было самым узким местом твоего ПХП приложения. На самом деле, если есть желание подключать файлы, указанные пользователем, надо где-то хранить полный список разрешенных к подключению файлов. И подключать файлы именно из него.
Нет, у меня как раз с самого начала был массив с "имя_раздела" => "имя_файла". Чего и остальным советую :roll:
На счёт file_exists() не вижу никакой проблемы, в моём скрипте из которого я взял этот код важна была исключительно простота установки новых модулей, скорость в данном случае стояла на последнем месте так-как планировалось поставить это дело на сайт с посещаемостью менее 10-ти человек в день...
file_exists кеширует результаты, так что работать должно быстро. Вообще системы, в которых имя модуля (подключаемого файла) передается через параметр, набили уже ТАКУЮ оскомину и для меня лично в какой-то степени свидетельствуют о непрофессионализме программиста (ну или, в крайнем случае, отсутствии у него воображения) Оригинальнее надо быть! Почему бы не сделать сразу /mypage.html вместо index.php?name=mypage.html? И смотрится красивее, и меньше соблазна взломать...
IMHO это достаточно простой и удобный для новичков способ. С хотябы примитивнейшей проверкой, вполне безопасный.
1. кеширует не сам file_exists() а файловая система. 2. лучше делать /mypage/ и класть туда index.php Тогда совсем понятно будет. 8) ЧПУ рулит ... но такой подход требует другой логики построения самого ядра сайта. он немного сложнее в реализации, зато дает более глубокое понимание процессов.
Dagdamor В корне не согласен, во первых ЧПУ достигается реврайтом и нет смысла изобретать велосипед, во вторых при правильной реализации скорее АД замёрзнет чем кто нибудь взломает, в третих это очень удобный и простой метод Возможно вы не совсем понимаете что такое профессионализм, тогда конечно простительно (когда я только начал изучать РНР я тоже искал во всём обходные пути) но факт остаётся фактом "Всё гениальное просто" а уровень профессионализма определяется не сложностью обходных путей, а тем насколько хорошо реализованы прямые пути !!!
ну реврайт меняет внешнюю/видимую часть, но внутренняя реализация остается прежней. т.е. суть не меняется. все разруливает /index.php. есть другой подход, когда разруливает ядро и вызовы /about/person/?p=abc яляются прямыми и там лежат соответстующие файлы требуемые только для этой операции, а не тянется все скопом. например http://search.php.ru/index.html выгядит так: Код (Text): <? include_once('oops.inc'); ?> все остальное реализуется ядром. 8) Это о "Все гениальное просто" хотя, конечно, каждый выбирает свой путь. и я не спорю, что лучше, а что хуже.
Согласись что кусок кода приведённого мной никто не взломает, однако товарищь утверждает что это не правильный (опасный) подход !!!
Кстати на счёт Зачем хранить где-то ещё если это вполне успешно хранится в файловой системе ? (зачем изобретать велосипед с квадратными колёсами ?)
по выполнении скрипта кеш живет дальше? 8) ага ... 440hz: p.s. сорри. случано отредактировал вместо цитаты ...
Мне например надоело что у меня изображение на мониторе а печатаю я на клавиатуре (было бы прикольно для разнообразия печатать на чашке с кофе, а форум читать на подошве батинка) Вот тут то как раз и играет роль профессионализм, ламеры даже не попробуют пропускать через что-либо вовсе... Для генерации урл я обычно делаю отдельную функцию которая генерирует URL (в зависимости от наличия/отсутсвия различных параметров) а в шаблон я его передаю исключительно на уровне логики скрипта.
[off] у вас прям какая-то мания(фобия?) на ламеров... такое чувство, что вы боитесь, что вас ламером обзовут :lol:
Нет, этого не боюсь, я боюсь самих ламеров, (так-что фобия) так-как не однократно страдал от их действий... (хотя иногда они наоборот мне помогают заработать деньги)
Затем, что не всё, что хранится в файловой системе предназначено для просмотра пользователями. Даже если обставить подключение файлов всевозможными условиями, нет гарантии, что в будущем не появится файл соответствующий этим условиям и одновременно содержащий конфиденциальную информацию. Принудительно перечисление файлов, необходимых для работы модуля исключает возможность возникновения подобных проблем и одновременно повышает гибкость системы, т.к. не накладывает ограничений на размещение файлов модуля.
В папке для подключаемых файлов должны быть подключаемые файлы, (тем более с именем "module_[a-z].php") а если пихать туда всё что под руку попадётся тогда будет не скрипт а бардак...