Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   include, ini-файлы и безопасность - help, pls (http://forum.oszone.net/showthread.php?t=31798)

mar 15-03-2003 18:38 217026

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

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

leprikon 16-03-2003 17:11 217027

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 217028

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]

leprikon 17-03-2003 13:38 217029

mar

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

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

advocat 26-03-2003 15:01 217030

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


Время: 23:26.

Время: 23:26.
© OSzone.net 2001-