代码之家  ›  专栏  ›  技术社区  ›  Patrick Glandien

最受支持的保护平面文件(sqlite db)不受HTTP访问的方法是什么?

  •  2
  • Patrick Glandien  · 技术社区  · 15 年前

    我正在开发一个PHP应用程序,它使用sqlite作为数据库管理系统,mysql和postgresql等不是一个替代方案(尽管我真的很想使用pgsql),因为我希望安装程序对初学者非常友好,并且不会让人头疼。 现在许多人使用共享主机,其中很多人只提供对htdocs目录的直接ftp访问,但不高于此。这意味着客户必须将sqlite数据库文件放在他们的htdocs中,这意味着它可以被世界访问,任何人都可以下载它。

    为客户提供某种保护的最佳方法是什么?这是一种简单的方法,并且在所有HTTP服务器上都受支持?

    4 回复  |  直到 14 年前
        1
  •  5
  •   Jeremy Stanley    15 年前

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

    您最好的办法是真正设置它,以便它可以托管在htdocs之上。可能您可以使用一个安装脚本来检查文档根目录,并在可能的情况下将sqlite文件移动到更高的目录。

    不幸的是,由于sqlite是由与Web服务器相同的用户读取和写入的,因此无法轻松地从外部访问中将其锁定。隐藏和移动它是我能想到的唯一真正的解决方案。

        2
  •  3
  •   raimue    15 年前

    没有保护可以在所有正在使用的HTTP服务器软件上工作。您所能做的最好的是将其移出文档根目录之外,因为无论使用的是哪个Web服务器,都不应该为其提供服务。

    实际上,要防止在文档根目录中提供文件,需要了解服务器软件并更改其配置。

        3
  •  3
  •   yukondude    15 年前

    默认情况下(对于我运行过的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服务器的任何类似类型的规则。

        4
  •  0
  •   Mahtar    15 年前

    如果它是ApacheWeb服务器,那么使用.htaccess文件。我不知道如何在IIS上执行此操作。

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