Наиболее поддерживаемый способ защиты плоских файлов (sqlite db) от HTTP-доступа? - PullRequest
2 голосов
/ 04 апреля 2009

Я занимаюсь разработкой приложения PHP, которое использует SQLite в качестве системы управления базами данных, MySQL, PostgreSQL и т. Д. Не является альтернативой (хотя мне бы очень хотелось использовать pgsql), потому что я хочу, чтобы установка была очень удобной для начинающих и не требовала нуля головная боль Сейчас многие используют общий хостинг, и многие из них предлагают только прямой FTP-доступ к каталогу htdocs, но не выше этого. Это означает, что клиенты должны будут поместить SQLite-Database-File в свои htdoc, что означает, что он доступен всему миру, и любой может его скачать.

Каков наилучший способ защитить клиента от этого, который прост и также поддерживается на всех HTTP-серверах?

Ответы [ 4 ]

5 голосов
/ 04 апреля 2009

Вы можете использовать файл .htaccess и заблокировать имя базы данных, чтобы оно не было доступно извне. Многие серверы уже делают это для всех имен файлов, начинающихся с «.». Конечно, это будет работать на Apache, но вам все равно понадобятся исправления для других веб-серверов.

Лучше всего настроить его так, чтобы он мог размещаться выше htdocs. Возможно, вы можете использовать установочный скрипт, который проверяет корень документа и перемещает файл sqlite в более высокий каталог, если это возможно.

К сожалению, поскольку sqlite читается и записывается тем же пользователем, что и веб-сервер, нет простого способа заблокировать его от внешнего доступа. Скрывать и перемещать это единственное реальное решение, о котором я могу думать.

3 голосов
/ 04 апреля 2009

Нет защиты, которая будет работать на всем используемом программном обеспечении HTTP-сервера. Лучшее, что вы можете сделать, это переместить его за пределы корня документа, так как независимо от того, какой веб-сервер используется, он никогда не должен обслуживаться.

Фактическая защита файлов от обслуживания внутри корня документа требует знания программного обеспечения сервера и изменения его конфигурации.

3 голосов
/ 04 апреля 2009

По умолчанию (для установок 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 в общедоступной среде.

0 голосов
/ 04 апреля 2009

Если это веб-сервер Apache, используйте файл .htaccess. Я не уверен, как это сделать на IIS.

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

...