Войти

Показать полную графическую версию : include, ini-файлы и безопасность - help, pls


mar
15-03-2003, 18:38
вопрос: на PHP
- исполбзуя include, подключаю какой-нибудь ini- файл с переменными.
- если не хочу значений по умолчанию, вызываю свой script.php?ini=qq.ini (т.е. передаю имя файла)
Есть ли возможность сделать это безопасно? (пока получается, что ежели кто-нибудь загонит какой-нибудь файл с включением php и вызовет такой скрипт со ссылкой на него, то будет выполнен любой произвольный код в этот файл помещенный???

Исправлено: mar, 18:40 15-03-2003

leprikon
16-03-2003, 17:11
mar

почему именно так передаешь qq.ini ?

не проще ли пойти путем include('qq.ini') ?
или просто _подставить_ в нужном месте кусок из qq
requery('qq.ini') ?

Чтобы не могли просмотреть содержимое или попытаться "выполнить" , можно сделать так :

<Files ~ "\.(ini|inc)$">
Order allow,deny
Deny from all
</Files>

mar
16-03-2003, 19:19
leprikon
штука в том, что этот скрипт стоит у заказчика, поэтому:
- я не могу лезть в конфигурацию его сервера
- у него должна быть возможность менять кое-какие детали получающихся форм => один и тот же скрипт, получая ссылки на разные ini файлы, includ-ает их в себя и генерит разные по виду и количеству полей формы.
- сколько и какие ini-файлы будет делать заказчик, - я (и он пока :)) - не знаю
Поэтому я не могу заранее знать название файла. Это их дело.

В общем, пока я сделала так (в том числе и с помощью обсуждений на phpclub (http://phpclub.net/talk/showthread.php?s=&postid=184041#post184041) и xpoint (http://www.xpoint.ru/cgi-bin/forum.cgi?action=thread&id=18763)):
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, а дальше какое-то количество текстовых полей (в цикле - заказчик может менять переменную цикла) *



Исправлено: mar, 19:27 16-03-2003

leprikon
17-03-2003, 13:38
mar

тоже выход из положения =)

тут можно несколькими способами решить, но все они будут рядом с твоим нынешним вариантом =)

advocat
26-03-2003, 15:01
mar
Если делать на более серьезном уровне, то можна через БД инклудить нужные темплейты, точнее вывод в выгребеном из БД темплейте :) соответствено их таким же образом и менять.




© OSzone.net 2001-2012