Наиболее поддерживаемый способ защиты плоских файлов (sqlite db) от доступа по HTTP?

StackOverflow https://stackoverflow.com/questions/717444

Вопрос

Я разрабатываю приложение 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 или его эквивалент, чтобы предотвратить отображение каталога в браузере.Это не помешает получить доступ к этому файлу, если имя и путь известны, но лучше, чем ничего, если вы не уверены, на каком веб-сервере он будет находиться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top