Автор Тема: include, ini-файлы и безопасность - help, pls  (Прочитано 3396 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mar

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.bio.pu.ru/~mar/
вопрос:
- исполбзуя include, подключаю какой-нибудь ini- файл с переменными.
- еслии не хочу значений по умолчанию, вызываю свой script.php?ini=qq.ini (т.е. передаю имя файла)
Есть ли возможность сделать это безопасно? (пока получается, что ежели кто-нибудь загонит какой-нибудь файл с включением php и вызовет такой скрипт со ссылкой на него, то будет выполнен любой произвольный код в этот файл помещенный???

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
include, ini-файлы и безопасность - help, pls
« Ответ #1 : 15 Марта 2003, 18:30:29 »
script.php?ini=1
В скрипте примерно так сделай:

$ini_files 
= array(
"1"=>"qq.ini",
"2"=>"qqq.ini",
);
if (isset(
$_GET[\'ini\']) && array_key_exists($_GET[\'ini\'], $ini_files)) {
   include($ini_files[$_GET[\'ini\']]);
}

и лучше поменяй расширение на php у подключаемых файлов.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн mar

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.bio.pu.ru/~mar/
include, ini-файлы и безопасность - help, pls
« Ответ #2 : 15 Марта 2003, 23:19:36 »
Макс
спасибо
НО: я делаю скрипт не для себя. Собственно, для того и ini файлы, чтобы скрипт не корежить. т.е. люди будут добавлять эти ini сколько угодно, когда взгрустнется :)

я подумала: м.б. загнать все шаблоны и служебные файлы в какой-нибудь каталог, а потом к переданному значению $ini в начало добавлять его значение. Тогда параметр hackrescript превратится в mydir/hackrescript и атака потеряет смысл

кстати, в phpclub http://phpclub.net/talk/showthread.php?s=&postid=183902#post183902 мне подсказали то же, что и ты. Прошу прощения за чайникрвский вопрос: это что, стандартное решение? (мне мало приходилось писать нае PHP, больше на Perl-е)

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
include, ini-файлы и безопасность - help, pls
« Ответ #3 : 16 Марта 2003, 01:04:28 »
Цитировать
Тогда параметр hackrescript превратится в mydir/hackrescript и атака потеряет смысл
сходу дыру не найду, но возможно всякие вариации с ../hackerscript и ../../hackerscript . В любом случае, решение предложеное тебе на обоих форумах стандартное и проверенное временами.
Как вариант можеш положить настройки в файлы
1.ini, 2.ini и т.д.
и подключать : script.php?ini=1
<?
$ini max(1intval($_GET[\'ini\']));
if (is_file(\'./mydir/\'.$ini.".ini")) {
include(\'./mydir/\'.$ini.".ini");
} else {
include(\'./mydir/1.ini");
}
...
?>
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн mar

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.bio.pu.ru/~mar/
include, ini-файлы и безопасность - help, pls
« Ответ #4 : 16 Марта 2003, 23:57:03 »
Макс
Да, так, пожалуй, можно и уйти от статики (когда все подключаемые страницы стоят заранее). Но я, пожалуй, дам им возможность называть файлы, как хотят :)
вот что на сейчас получилось:

$work
="qq/"//рабочий каталог с включаемыми файлами
$defaultini=$work"qq.php";
// вводим значения по умолчанию (из ini-файлов)
if (!@$ini)$ini=$defaultini// если нет вызова , ini - по-умолчанию
else {$ini=basename($ini);} // отрезаем путь
$ini=$work$ini// добавляем в начало имя каталога

if (!file_exists($ini)) { // а вдруг ошиблись
 
include ($defaultini);  // включаем по умолчанию
} else {
 include (
$ini);  // включаем из ini-файла


Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
include, ini-файлы и безопасность - help, pls
« Ответ #5 : 17 Марта 2003, 01:53:58 »
я бы все-таки посоветовал не писать в URL-е полное имя файла:
script.php?ini=aaa (то есть без .php
а в скрипте очищать его от всех "левых" символов

$ini 
$work.preg_replace("#[^a-zA-Z0-9_]#"""$_GET[\'ini\']).".php";
include(is_file($ini)?$ini:$defaultini);
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн mar

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.bio.pu.ru/~mar/
include, ini-файлы и безопасность - help, pls
« Ответ #6 : 17 Марта 2003, 02:32:27 »
насчет .php, наверное (хотя в моем случае при попытке "посмотреть" этот php, можно будет увидеть пустое окно: там только пары переменная-значение )
а вот о способах очистки: неужели basename() может оказаться недостаточно??

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
include, ini-файлы и безопасность - help, pls
« Ответ #7 : 17 Марта 2003, 18:29:30 »
В вопросах безопасности я немного параноик ;)
Я бы еще твою папку с файлами через .htaccess закрыл:
deny from all чтобы файлы нельзя было вызывать напрямую через броузер.
basename() почти наверняка будет достаточно, но я все равно бы сделал такую очистку.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28