2009-04-04 5 views
1

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

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

ответ

4

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

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

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

0

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

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

4

По умолчанию (для 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

Как уже говорилось, большинство общедоступных хостинговых сред не будут обеспечивать поддержку для его перемещения из корневого каталога:/и именование базы данных, например .htdatabase.sqlite, похоже на довольно грязный взломать. –

+0

Да, проблема с.htwhatever файлы в том, что их иногда пропускают, потому что они скрыты в * каталогах каталога NIX (включая FTP-клиенты). Конечно, вы можете отказать в любых файлах с именем database.sqlite в (как вы уже догадались) файле .htaccess, но тогда сам файл .htaccess может быть пропущен. – yukondude

2

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

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