Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запретить самостоятельное исполнение скриптов
 
 автор: Владимир55   (07.02.2009 в 12:08)   письмо автору
 
 

Зачастую скрипт состоит из нескольких файлов, которые инклудятся в нужном порядке. При этом остается неизвестным, что произойдет, если инклудящиеся части запустить самостоятельно. Как я вычитал на одном из форумов, этим нередко пользуются злоумышленники для нанесения вреда сайту.

Можно ли сделать так, чтобы скрипты, входящие в состав страниц сайта, открывались бы только вместе с этими страницами, но не запускались бы самостоятельно?

Может быть, это решается установкой прав доступа?
Каких?

  Ответить  
 
 автор: ChieFSS   (07.02.2009 в 12:15)   письмо автору
 
   для: Владимир55   (07.02.2009 в 12:08)
 

Можно вынести эти файлы за пределы каталога public_html (www) или объявить в главном файле константу, а в файлах страниц проверять её существование.

  Ответить  
 
 автор: Владимир55   (07.02.2009 в 12:34)   письмо автору
 
   для: ChieFSS   (07.02.2009 в 12:15)
 

да, это хорошая идея.

Вероятно, ещё можно разместить эти файлы в запароленной папке - ведь для вызова со стороны сервера пароль не потребуется.

А с правами доступа - никак?

  Ответить  
 
 автор: sim5   (07.02.2009 в 12:53)   письмо автору
 
   для: Владимир55   (07.02.2009 в 12:34)
 

Закройте папку подключаемых файлов посредством .htaccess.

  Ответить  
 
 автор: Yuriev   (07.02.2009 в 13:06)   письмо автору
 
   для: Владимир55   (07.02.2009 в 12:08)
 

А если так?
if (eregi('имя_этого_файла.php', $_SERVER['PHP_SELF'])) die('Не хулюганить!');

  Ответить  
 
 автор: Loki   (07.02.2009 в 22:40)   письмо автору
 
   для: Yuriev   (07.02.2009 в 13:06)
 

if (__FILE__!=$_SERVER['PHP_SELF'])) die('Не хулюганить!');

  Ответить  
 
 автор: cheops   (08.02.2009 в 03:52)   письмо автору
 
   для: Loki   (07.02.2009 в 22:40)
 

Только $_SERVER['PHP_SELF'] хорошо бы через basename() пропустить. Все-таки наиболее рациональный и надежный вариант - выделение включаемых файлов в отдельную директорию и закрытие к ней доступа.

  Ответить  
 
 автор: Николай2357   (08.02.2009 в 07:41)   письмо автору
 
   для: Владимир55   (07.02.2009 в 12:08)
 

Это делается очень просто. Нужно поставить замки. В файле, к которому подключается так:
<?
$key_include 
"yes";

а в самом начале подключаемых так:
<?
if(!$key_include)
exit(
"Шиш.");

  Ответить  
 
 автор: sim5   (08.02.2009 в 08:39)   письмо автору
 
   для: Николай2357   (08.02.2009 в 07:41)
 

Нужно просто помещать такие файлы в отдельную папку, в .htaccess которой прописать:
Deny from all
и ничего не выдумывать.

  Ответить  
 
 автор: Николай2357   (08.02.2009 в 09:42)   письмо автору
 
   для: sim5   (08.02.2009 в 08:39)
 

Не всегда так. Бывает что нужно "засекретить" уже готовую структуру, и довольно не маленькую. Переписывать все пути в инклудах довольно геморрно, а это можно сделать одним движением.

  Ответить  
 
 автор: sim5   (08.02.2009 в 10:09)   письмо автору
 
   для: Николай2357   (08.02.2009 в 09:42)
 

Нет таких трудностей, которые невозможно преодолеть, зато потом не придется лишним заниматься. А переписть что-то однотипное, даже в большом количестве файлов, это уж и не такая проблема.

  Ответить  
 
 автор: Николай2357   (08.02.2009 в 10:43)   письмо автору
 
   для: sim5   (08.02.2009 в 10:09)
 

>Нет таких трудностей, которые невозможно преодолеть
Нету, кто же спорит... Просто не обязательно эти трудности создавать, когда можно найти более простое решение. Вот к примеру модульная структура. Есть файл - диспетчер, который подключает модули приложения. Файлы модуля находятся в своих директориях, со своим диспетчером. В них же находятся файлы и директории, которые не нужно защищать, а как раз наоборот. Допустим каталог со скачиваемыми файлами или исполняемые скрипты. Если такой .htaccess положить в корень модуля, всё испортится. А если разнести модуль по каталогам - пропадет смысл модульной системы. Можно перекроить весь модуль, но тогда его структура не будет прозрачной. А если он состоит еще из нескольких, то вообще путаница.

  Ответить  
 
 автор: sim5   (08.02.2009 в 10:57)   письмо автору
 
   для: Николай2357   (08.02.2009 в 10:43)
 

Я говорю о том, что те, что подключаем (скрипты) защищать, и от этого ничего не рухнет. Да собственно нужно всегда обдумывать все заранее, а не рассовывать куда непопадя (вот это и есть создание трудностей). Хотя исключения всегда бывают.

  Ответить  
 
 автор: Владимир55   (08.02.2009 в 11:32)   письмо автору
 
   для: sim5   (08.02.2009 в 10:57)
 

Всё приходит с опытом.

Если для устранения допущенной шероховатости приходится переделывать сложные скрипты, а потом несколько дней их проверять и подстраивать, то в этой технической работе буквально тонешь...

А если таких шероховатостей много, то просто ходишь по кругу.

И в такой ситуации простота устранения огрехи делается самом ценным качеством.

Абсолютно любой скрипт, который уже совершенно готов, после его завершения хочется переделать с целью упрощения и улучшения.

У Вас не так?

  Ответить  
 
 автор: sim5   (08.02.2009 в 11:47)   письмо автору
 
   для: Владимир55   (08.02.2009 в 11:32)
 

Как сказать. Планируя проект, лучше обдумать сразу то, что будет не доступно извне, а значит просто закрыто. Если есть с этим проблемы в уже готовом, то подумать сразу - может есть смысл потратить немного времени и внести изменения один раз, чтобы в последствии не "держать в уме" проблему. Я поступаю так, хотя это совсем не обязательно единственное решение.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования