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

Форум PHP

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

 

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

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

тема: Безопастность при includ
 
 автор: tvv123456   (05.01.2010 в 01:40)   письмо автору
 
 

Здравствуйте! Всех с наступившим. имеется несколько небольших вопросиков:
Тут недавно была тема по безопасному программированию. Среди прочих пунктов был:
- В начале каждой страницы создавать констану и проверять ее в начале каждого подключаемого файла.
Допустим у меня есть файл db.php - там осуществляеться подключение к mysql и старт сессий:

<?php 
if(!defined("const") or const !== "sdaf") {exit("Ошибка подключения файла!!!");}
$db mysql_connect ("localhost","root","");
@
mysql_select_db("db",$db);
session_start();

Дак вот наверное ясно, что если злоумышленнику удасться залить свой файл на сервер, то достаточно подключить этот файл чтоб получить полный доступ к БД, конечно строка (if(!defined("const") or const !== "sdaf") {exit("Ошибка подключения файла!!!");}) может и не даст подключить его напрямую, но собственно 1-ый вопрос:
Что мешает злоумышленнику подключить допустим файл index.php, в котором подключен файл db.php? Конечно, будет немного неудобнее, чем если просто подключить сам файл db.php, но в этом случае об удобстве вряд ли кто думать будет.

2-ой вопрос: Как можно защитить себя от такого? Первое что приходит в голову в конце каждой страницы прописывать:

<?
exit;
?>

Но как-то не красиво и можно забыть где-нибудь.
3-й вопрос: Подскажите как при помощи .htaccess разрешить инклудить файлы только из определенных дерикторий(например папка includ)?

и еще 4-ый вопрос:
Как в открытых папках( права 777) запретить исполнение любого скрипта?
пока делаю так в htaccess:

<Files ~ "\.(php|exe|html|xhtm)$"> 
  deny from all 
</Files>

   
 
 автор: Вурдалак   (05.01.2010 в 02:27)   письмо автору
 
   для: tvv123456   (05.01.2010 в 01:40)
 

Это защита от прямого доступа по HTTP, а не от самих себя.

   
 
 автор: tvv123456   (05.01.2010 в 02:31)   письмо автору
 
   для: Вурдалак   (05.01.2010 в 02:27)
 

Это как я понимаю по первому вопросу?
Но тут Сheops в 2-х темах когда-то(http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=85&page=12 ) писал, что если мы попытаемся подключить файл с другого севрера, то получим лишь результат работы этого файла а не нужные нам переменные, действия и т.п.
Так что немного не то.

   
 
 автор: Вурдалак   (05.01.2010 в 02:36)   письмо автору
 
   для: tvv123456   (05.01.2010 в 02:31)
 

Как слова cheops'a противоречат моим?

   
 
 автор: tvv123456   (05.01.2010 в 02:39)   письмо автору
 
   для: Вурдалак   (05.01.2010 в 02:36)
 

Ну, как я понял вы имели ввиду что можно подключить файл с другого левого сайта?
я не прав?
Я имел ввиду:
на многих сайтах дают возможность пользователям добавлять свои файлы, то есть появляються папки с правами 777, куда можно нашвырять всякой гадости и подключить наши "системные" файлы. Но если не знаешь пароля(константы) для этого файла, то не подключишь, но в этом случае можно подключить файл, который уже подключает этот файл(разве не так)?
Можно тогда пример для наглядности? чтоб я понял?
И заодно по другим вопросам можно? :)

   
 
 автор: Вурдалак   (05.01.2010 в 02:46)   письмо автору
 
   для: tvv123456   (05.01.2010 в 02:39)
 

В подключаемом файле могут использоваться переменные, определяемые во внешнем файле. Например, при register_globals = on такой файл может создать реальную угрозу безопасности: пользователь заставит выполнится код подключаемого файла со своими значениями.

По поводу остального: никогда не сохраняй файлы с пользовательскими именами и всё.

   
 
 автор: tvv123456   (05.01.2010 в 02:55)   письмо автору
 
   для: Вурдалак   (05.01.2010 в 02:46)
 

register_globals = on - вроде уже на данный момент не сильно актуально(кроме дыр от этого ничего еще более менее полезного мне не удалось добиться).
>никогда не сохраняй файлы с пользовательскими именами и всё
Весьма спорно.
Тема остаеться открыта хочеться услышать другие мнения по всем вопросам:
1-ответ
2-ответ
3-ответ
4-ответ

   
 
 автор: Вурдалак   (05.01.2010 в 03:04)   письмо автору
 
   для: tvv123456   (05.01.2010 в 02:55)
 

Удачи

   
 
 автор: ~AquaZ~   (05.01.2010 в 13:58)   письмо автору
 
   для: tvv123456   (05.01.2010 в 01:40)
 

1. Ничего, кроме Вашей системы защиты, чтобы подключить этот файл, нужно иметь свой пхп-файл на Вашем сервере, см ф конец.
2. Нет смысла защищать эти файлы, см. ф конец.
3. .htaccess - помеха только снаружи. Загнать файл внутрь = полный игнор .htaccess
4. Правильно, от внешнего мира это работает.

Я понимаю, объявить константу - это круто. Точнее пустое место. Чтобы инклудить любой файл, необходимо загнать другой файл на сервер. Если это сделано, ничего не мешает написать там строку
<?
echo '<pre>'.file_get_contents('inc/db.php').'</pre>';
, и сразу станет понятно, какую константу объявить.

   
 
 автор: neadekvat   (05.01.2010 в 14:42)   письмо автору
 
   для: tvv123456   (05.01.2010 в 01:40)
 

Если злоумышленник может залить исполняющий файл на сервер, то, пардон, .. пора думать о том, как предотвратить подобную ситуацию.
При загрузке файлов проверяйте окончания имен. Если загружаете картинку - сохраняйте файл с определенным расширением, а не тем, которе к вам пришло. То есть не просто копируйте файл из временно папки в папку своего сайта, а создавайте из загружаемого изображения новое и уже его сохраняйте.
Где-то хорошо это расписывалось, по-моему, на хабре, но ссылку уже не найду.

   
 
 автор: Fractured#   (05.01.2010 в 19:15)   письмо автору
 
   для: neadekvat   (05.01.2010 в 14:42)
 

> При загрузке файлов проверяйте окончания имен

Бугага

   
 
 автор: neadekvat   (05.01.2010 в 19:17)   письмо автору
 
   для: Fractured#   (05.01.2010 в 19:15)
 

Пля, расширения*

   
Rambler's Top100
вверх

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