|
|
|
| Здравствуйте! Всех с наступившим. имеется несколько небольших вопросиков:
Тут недавно была тема по безопасному программированию. Среди прочих пунктов был:
- В начале каждой страницы создавать констану и проверять ее в начале каждого подключаемого файла.
Допустим у меня есть файл 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-ой вопрос: Как можно защитить себя от такого? Первое что приходит в голову в конце каждой страницы прописывать:
Но как-то не красиво и можно забыть где-нибудь.
3-й вопрос: Подскажите как при помощи .htaccess разрешить инклудить файлы только из определенных дерикторий(например папка includ)?
и еще 4-ый вопрос:
Как в открытых папках( права 777) запретить исполнение любого скрипта?
пока делаю так в htaccess:
<Files ~ "\.(php|exe|html|xhtm)$">
deny from all
</Files>
|
| |
|
|
|
|
|
|
|
для: tvv123456
(05.01.2010 в 01:40)
| | Это защита от прямого доступа по HTTP, а не от самих себя. | |
|
|
|
|
|
|
|
для: Вурдалак
(05.01.2010 в 02:27)
| | Это как я понимаю по первому вопросу?
Но тут Сheops в 2-х темах когда-то(http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=85&page=12 ) писал, что если мы попытаемся подключить файл с другого севрера, то получим лишь результат работы этого файла а не нужные нам переменные, действия и т.п.
Так что немного не то. | |
|
|
|
|
|
|
|
для: tvv123456
(05.01.2010 в 02:31)
| | Как слова cheops'a противоречат моим? | |
|
|
|
|
|
|
|
для: Вурдалак
(05.01.2010 в 02:36)
| | Ну, как я понял вы имели ввиду что можно подключить файл с другого левого сайта?
я не прав?
Я имел ввиду:
на многих сайтах дают возможность пользователям добавлять свои файлы, то есть появляються папки с правами 777, куда можно нашвырять всякой гадости и подключить наши "системные" файлы. Но если не знаешь пароля(константы) для этого файла, то не подключишь, но в этом случае можно подключить файл, который уже подключает этот файл(разве не так)?
Можно тогда пример для наглядности? чтоб я понял?
И заодно по другим вопросам можно? :) | |
|
|
|
|
|
|
|
для: tvv123456
(05.01.2010 в 02:39)
| | В подключаемом файле могут использоваться переменные, определяемые во внешнем файле. Например, при register_globals = on такой файл может создать реальную угрозу безопасности: пользователь заставит выполнится код подключаемого файла со своими значениями.
По поводу остального: никогда не сохраняй файлы с пользовательскими именами и всё. | |
|
|
|
|
|
|
|
для: Вурдалак
(05.01.2010 в 02:46)
| | register_globals = on - вроде уже на данный момент не сильно актуально(кроме дыр от этого ничего еще более менее полезного мне не удалось добиться).
>никогда не сохраняй файлы с пользовательскими именами и всё
Весьма спорно.
Тема остаеться открыта хочеться услышать другие мнения по всем вопросам:
1-ответ
2-ответ
3-ответ
4-ответ | |
|
|
|
|
|
|
|
для: tvv123456
(05.01.2010 в 02:55)
| | Удачи | |
|
|
|
|
|
|
|
для: tvv123456
(05.01.2010 в 01:40)
| | 1. Ничего, кроме Вашей системы защиты, чтобы подключить этот файл, нужно иметь свой пхп-файл на Вашем сервере, см ф конец.
2. Нет смысла защищать эти файлы, см. ф конец.
3. .htaccess - помеха только снаружи. Загнать файл внутрь = полный игнор .htaccess
4. Правильно, от внешнего мира это работает.
Я понимаю, объявить константу - это круто. Точнее пустое место. Чтобы инклудить любой файл, необходимо загнать другой файл на сервер. Если это сделано, ничего не мешает написать там строку
<?
echo '<pre>'.file_get_contents('inc/db.php').'</pre>';
| , и сразу станет понятно, какую константу объявить. | |
|
|
|
|
|
|
|
для: tvv123456
(05.01.2010 в 01:40)
| | Если злоумышленник может залить исполняющий файл на сервер, то, пардон, .. пора думать о том, как предотвратить подобную ситуацию.
При загрузке файлов проверяйте окончания имен. Если загружаете картинку - сохраняйте файл с определенным расширением, а не тем, которе к вам пришло. То есть не просто копируйте файл из временно папки в папку своего сайта, а создавайте из загружаемого изображения новое и уже его сохраняйте.
Где-то хорошо это расписывалось, по-моему, на хабре, но ссылку уже не найду. | |
|
|
|
|
|
|
|
для: neadekvat
(05.01.2010 в 14:42)
| | > При загрузке файлов проверяйте окончания имен
Бугага | |
|
|
|
|
|
|
|
для: Fractured#
(05.01.2010 в 19:15)
| | Пля, расширения* | |
|
|
|