Наиболее поддерживаемый способ защиты плоских файлов (sqlite db) от доступа по HTTP?
Вопрос
Я разрабатываю приложение PHP, которое использует SQLite в качестве системы управления базами данных, MySQL и PostgreSQL и т. д.это не альтернатива (хотя мне бы очень хотелось использовать pgsql), потому что я хочу, чтобы установка была очень удобной для новичков и не вызывала головной боли.Сейчас многие люди используют общий хостинг, и многие из них предлагают только прямой FTP-доступ к каталогу htdocs, но не выше этого.Это означает, что клиентам придется поместить файл базы данных SQLite в свои htdocs, а это означает, что он доступен всему миру, и каждый может его загрузить.
Каков наилучший способ предоставить клиенту какую-то защиту от этого, которая проста и поддерживается на всех HTTP-серверах?
Решение
Вы можете использовать файл .htaccess и заблокировать имя базы данных, чтобы к ней не было доступа извне.Многие серверы уже делают это для всех имен файлов, начинающихся с «.».Конечно, это будет работать на Apache, но вам все равно понадобятся исправления для других веб-серверов.
Лучше всего настроить его так, чтобы его можно было разместить над htdocs.Возможно, вы можете использовать сценарий установки, который проверяет корень документа и, если возможно, перемещает файл sqlite в каталог более высокого уровня.
К сожалению, поскольку sqlite читается и записывается тем же пользователем, что и веб-сервер, нет простого способа заблокировать его от внешнего доступа.Скрыть и переместить его — единственное реальное решение, которое я могу придумать.
Другие советы
Не существует защиты, которая бы работала со всем используемым программным обеспечением HTTP-сервера.Лучшее, что вы можете сделать, — это переместить его за пределы корня документа, поскольку независимо от того, какой веб-сервер используется, он никогда не должен обслуживаться.
На самом деле защита файлов от обслуживания внутри корня документа требует знаний о программном обеспечении сервера и изменения его конфигурации.
По умолчанию (для установок Linux, с которыми я сталкивался) Apache фактически блокирует все, что начинается с .ht
от прямого обслуживания:
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
Если вы предпочитаете использовать имя файла, например sqlite.db
для вашего файла базы данных, вы можете заблокировать его, используя это правило:
<Files ~ "\.db$">
Order allow,deny
Deny from all
</Files>
Разумеется, для реализации этого правила на большинстве хостинг-провайдеров вам придется раздать .htaccess
файл, содержащий правило.Иногда их можно пропустить, поскольку по умолчанию они не отображаются в списках каталогов *NIIX (или в FTP-клиенте).
Мне не известны какие-либо правила подобного типа, которые можно было бы использовать для сервера Microsoft IIS в общей размещенной среде.
Если это веб-сервер Apache, используйте файл .htaccess.Я не уверен, как это сделать в IIS.
Я думаю, что первым делом вам следует поместить пустой файл index.html или его эквивалент, чтобы предотвратить отображение каталога в браузере.Это не помешает получить доступ к этому файлу, если имя и путь известны, но лучше, чем ничего, если вы не уверены, на каком веб-сервере он будет находиться.