вопрос: на PHP
- исполбзуя include, подключаю какой-нибудь ini- файл с переменными. - если не хочу значений по умолчанию, вызываю свой script.php?ini=qq.ini (т.е. передаю имя файла) Есть ли возможность сделать это безопасно? (пока получается, что ежели кто-нибудь загонит какой-нибудь файл с включением php и вызовет такой скрипт со ссылкой на него, то будет выполнен любой произвольный код в этот файл помещенный??? [s]Исправлено: mar, 18:40 15-03-2003[/s] |
mar
почему именно так передаешь qq.ini ? не проще ли пойти путем include('qq.ini') ? или просто _подставить_ в нужном месте кусок из qq requery('qq.ini') ? Чтобы не могли просмотреть содержимое или попытаться "выполнить" , можно сделать так : <Files ~ "\.(ini|inc)$"> Order allow,deny Deny from all </Files> |
leprikon
штука в том, что этот скрипт стоит у заказчика, поэтому: - я не могу лезть в конфигурацию его сервера - у него должна быть возможность менять кое-какие детали получающихся форм => один и тот же скрипт, получая ссылки на разные ini файлы, includ-ает их в себя и генерит разные по виду и количеству полей формы. - сколько и какие ini-файлы будет делать заказчик, - я (и он пока :)) - не знаю Поэтому я не могу заранее знать название файла. Это их дело. В общем, пока я сделала так (в том числе и с помощью обсуждений на phpclub и xpoint): 1) у ini - файлов расширение php 2) все они будут лежать в отдеьном каталоге 3) получаемое значение переменной обрабатывается basename() 4) к полученному после этого значению спереди принудительно добавляется имя этого каталога 5) если файл не существует, открываем default-ный ini-файл пока это все выглядит так: $work="qq/"; //рабочий каталог со всеми дополнительными включаемыми файлами $defaultini="qq.php"; // вводим значения по умолчанию // если нет вызова с именем ini-файла, ini - по-умолчанию: if (!@$ini)$ini=$defaultini; else $ini=$basename($ini); // добавляем в начало имя каталога //=> делаем бессмыссленным взлом $ini=$work. $ini; if (!file_exists($ini)) { include ($defaultini); *// включаем по умолчанию } else { include ($ini); *// включаем из ini-файла } ////////////////////////////////////////////// а вот, собственно, пример этого злосчастного ini <? $frm="mail1.php"; // файл шаблона формы ввода $to="mail@mail.ru"; // адрес отправки $subj="about mail"; // поле subject $h="<h1 align=center>Почта</h1>"; // заголовок $pref="тут текст"; // введение ?> ////////////// ну, и, соответственно, файл mail1.php, в котором будут отображаться $h и $pref, а дальше какое-то количество текстовых полей (в цикле - заказчик может менять переменную цикла) * [s]Исправлено: mar, 19:27 16-03-2003[/s] |
mar
тоже выход из положения =) тут можно несколькими способами решить, но все они будут рядом с твоим нынешним вариантом =) |
mar
Если делать на более серьезном уровне, то можна через БД инклудить нужные темплейты, точнее вывод в выгребеном из БД темплейте :) соответствено их таким же образом и менять. |
Время: 23:26. |
Время: 23:26.
© OSzone.net 2001-