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

Форум PHP

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

 

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

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

тема: Разграничение доступа к БД и файлам
 
 автор: sasha1133   (10.09.2010 в 02:34)   письмо автору
 
 

Пишу CMS, в которую можно будет устанавливать новые модули (форум и т.п.). И столкнулся с такой проблемой. Как сделать так, чтобы модули могли обращаться только к своим таблицам (не базам данных, база будет одна с одним пользователем) и только читать/писать определённые файлы/папки? Это нужно для того, чтобы сторонний модуль не слил/стёр информацию в других таблицах и файлах.

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

  Ответить  
 
 автор: Trianon   (10.09.2010 в 08:54)   письмо автору
 
   для: sasha1133   (10.09.2010 в 02:34)
 

Как сделать так, чтобы модули могли обращаться только к своим таблицам (не базам данных, база будет одна с одним пользователем

Одна база это понятно. Но почему с одним пользователем?

  Ответить  
 
 автор: sasha1133   (10.09.2010 в 12:16)   письмо автору
 
   для: Trianon   (10.09.2010 в 08:54)
 

Просто у меня сомнения по поводу того, можно ли на хостинге создавать новых пользователей. Мне казалось, что хостер выдаёт только 1 логин + пароль к базе.

Но с базой более менее понятно – только системный модуль "знает" логин и пароль к базе, а остальные модули могут при установке 1) создавать свои новые таблицы; 2) получать свой уникальный номер для доступа к ним. При этом в специальной таблице создаётся список уникальных номеров и прав доступа для них, по которым системный модуль сверяется.

Проблема заключается в том, чтобы запретить сторонним модулям читать файлы, т.к. в таком случае не проблема, например, прочесть параметры подключения к БД и подключиться напрямую.

  Ответить  
 
 автор: sl1p   (10.09.2010 в 12:35)   письмо автору
 
   для: sasha1133   (10.09.2010 в 12:16)
 

а если модуль будет зависеть от корневых модулей?
Это вы уже накручиваете помоему:)

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

  Ответить  
 
 автор: sasha1133   (10.09.2010 в 23:06)   письмо автору
 
   для: sl1p   (10.09.2010 в 12:35)
 

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

  Ответить  
 
 автор: Ирбис   (11.09.2010 в 08:50)   письмо автору
 
   для: sasha1133   (10.09.2010 в 12:16)
 

>>Проблема заключается в том, чтобы запретить сторонним модулям читать файлы, т.к. в таком случае не проблема, например, прочесть параметры подключения к БД и подключиться напрямую.

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

  Ответить  
 
 автор: sasha1133   (11.09.2010 в 13:26)   письмо автору
 
   для: Ирбис   (11.09.2010 в 08:50)
 

Спасибо, возьму на заметку. Но как предотвратить, например, просто удаление системных файлов сторонним модулем?

PS. Может есть какая нибудь директива .htaccess для этого? Или php файлы не учитывают это при доступе к файлам?

  Ответить  
 
 автор: Ирбис   (11.09.2010 в 15:40)   письмо автору
 
   для: sasha1133   (11.09.2010 в 13:26)
 

>>Но как предотвратить, например, просто удаление системных файлов сторонним модулем?
Не знаю.

>>Может есть какая нибудь директива .htaccess для этого?
.htaccess тут ничем помочь не сможет. Он содержит инструкции, которые обрабатываются web-сервером при обращении к файлу. Т.е. он играет свою роль только тогда, когда запрос к файлу осуществляется со стороны web-сервера, например, Вы через браузер обращаетесь к скрипту. Из самого скрипта обращение к файлу происходит не со стороны web-сервера, а со стороны файловой системы, которая никаких инструкций из .htaccess считывать не будет.

  Ответить  
 
 автор: sasha1133   (11.09.2010 в 22:13)   письмо автору
 
   для: Ирбис   (11.09.2010 в 15:40)
 

Спасибо за полезную информацию. А возможно ли сделать так, чтобы модули можно было загрузить только с официального сайта через админку?

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

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