将SQLite用于我的网站数据库时的实用性和安全性?

时间:2013-08-28 17:20:21

标签: php database sqlite

我正在为我工​​作的公司建立一个网站,其前端已经完成。目前,该站点通过读取JSON文件的信息填充自己。

我将很快离开这个工作,并希望离开网站,以便其他员工能够更新它,而无需知道如何正确读取和写入JSON数据。所以我写了一个非常简单的站点来进行更新(列出当前在实际站点上的项目,让用户添加项目,删除项目或重新排序项目。)数据都是文本,我正在做一些基本的清理JS在调用服务器之前编写。更重要的是,我使用.htaccess要求员工登录甚至到达网站的这一部分。

所以现在我到了需要实际数据库写入的地步。由于我们的网站是从OSX服务器运行的,我们已经安装了SQLite3。从我在StackOverflow上看到的内容来看,SQLite可以很好地用作实时数据库,只要我不需要UN / PW访问,或者需要扩展到100k +点击。 (我们是一家小公司 - 我们每天将获得2-3次点击。)

我开始设置一个PHP页面来连接数据库并写入它,并在发生静默失败后,意识到.DB文件需要对组进行RW访问才能让网站访问它。这意味着对于db和保存它的目录(我假设),chmod至少为444(如果不是777)。我问过处理服务器管理员的老板关于设置这个问题,他说他不喜欢这样做。虽然我理解他的担忧,但我不确定我还应该做些什么。如果没有对文件的RW访问,我不知道任何其他方法来使这项工作。

那么我的选择是什么?我应该放弃SQLite并只安装MySQL吗?如果我坚持使用SQLite,那么安全性的最佳实践是什么?是否有一些可接受的最佳方法来设置batabase / encrypt数据/隐藏数据库?

谢谢!

1 个答案:

答案 0 :(得分:5)

您可能会感到困惑的是 UNIX / Linux文件权限 web accessibility

在* NIX中,每个文件都属于所有者和组。机器上的每个进程(包括终端上的用户)都在属于一个组(或多个组)的用户下运行。 是文件权限的含义。它们控制哪个进程可以访问哪些文件。用户可以拥有文件的直接权限(用户权限),通过其组成员身份获得间接权限,或者,如果没有别的话,可以拥有其他权限。

这一切都与网络用户无关。 Web服务器是一个侦听端口80(或其他地方)上的传入HTTP请求的进程。然后它决定如何响应这些请求。这种做我回应或不做我与文件权限没有任何关系。 Web服务器有自己的规则,允许的请求以及拒绝的请求与文件权限无关。

如果Web服务器尝试访问磁盘上的某个文件,则然后文件权限发挥作用。 Web服务器作为属于某个组的某个用户运行,通常为www-data。这意味着Web服务器可以读取,写入或执行它有权访问的文件。如果Web服务器没有文件的读取权限,则无法为其提供服务。但仅仅因为Web服务器对文件具有写入权限并不意味着网站访问者可以以任何方式写入该文件,因为Web服务器不会让它们。 Web服务器提供Web请求,它不提供对随机用户的直接文件访问。

典型设置是Web服务器以www-data运行。传入请求会导致Web服务器启动PHP脚本,该脚本也作为具有www-data权限的子进程运行。 PHP进程读取或写入文件;它只能读取和写入具有www-data权限的文件来控制脚本读取或写入的内容。

如果要使用SQLite数据库,则必须具有该文件的权限。确实,您通常希望尽可能地分离权限。但在这种情况下,您需要将www-data用户(或您运行的任何PHP用户)的权限授予该文件。所以呢?这本身并不是一个安全漏洞。可能发生的最糟糕的事情是获得www-data权限的攻击者将能够写入数据库。但在此之前,他必须绕过许多其他安全机制,所以这应该是你最不担心的。