2

我正在开发一个使用 SQLite 作为数据库管理系统的 PHP 应用程序,MySQL 和 PostgreSQL 等不是替代品(尽管我真的很想使用 pgsql),因为我希望设置对初学者非常友好且零头痛. 现在很多人使用共享主机,其中很多人只提供对 htdocs 目录的直接 FTP 访问,但不高于此。这意味着客户必须将 SQLite-Database-File 放在他们的 htdocs 中,这意味着全世界都可以访问它并且任何人都可以下载它。

为客户提供某种保护的最佳方式是什么,既简单又在所有 HTTP 服务器上都支持?

4

4 回答 4

6

您可以使用 .htaccess 文件并锁定数据库名称,使其无法从外部访问。许多服务器已经对所有以“.”开头的文件名执行此操作。这当然适用于 Apache,但您仍然需要对其他 Web 服务器进行修复。

您最好的选择是真正设置它,以便它可以托管在 htdocs 之上。也许您可以使用安装脚本来检查文档根目录并将 sqlite 文件移动到更高的目录(如果可能)。

不幸的是,由于 sqlite 是由与 Web 服务器相同的用户读取和写入的,因此没有简单的方法可以将其锁定以防止外部访问。隐藏和移动它是我能想到的唯一真正的解决方案。

于 2009-04-04T17:33:45.293 回答
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 服务器。

于 2009-04-04T17:55:52.477 回答
3

没有任何保护措施适用于所有正在使用的 HTTP 服务器软件。您可以做的最好的事情是将它移到文档根目录之外,因为无论正在使用哪个 Web 服务器,都不应该提供它。

实际上,要保护文件免于在文档根目录中提供服务,需要有关服务器软件和更改其配置的知识。

于 2009-04-04T18:18:40.833 回答
0

如果它是 Apache Web 服务器,则使用 .htaccess 文件。我不确定如何在 IIS 上执行此操作。

我想首先你应该放空 index.html 文件或等效文件以防止在浏览器中列出目录。如果名称和路径已知,这不会阻止访问该文件,但如果您不确定它将在哪个 Web 服务器上,总比没有好。

于 2009-04-04T17:41:51.340 回答