1

我正在为我工​​作的公司建立一个网站,前端已经完成。目前,该站点根据从 JSON 文件中读取的信息来填充自身。

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

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

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

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

谢谢!

4

1 回答 1

5

在这里您可能会感到困惑的是UNIX/Linux 文件权限Web 可访问性

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

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

如果 Web 服务器试图访问磁盘上的某个文件,那么文件权限就会起作用。Web 服务器作为属于某个组的某个用户运行,通常是www-data. 这意味着 Web 服务器可以读取、写入或执行它有权访问的文件。如果 Web 服务器没有文件的读取权限,它将无法提供该文件。但是仅仅因为网络服务器对文件具有写入权限并不意味着网站访问者可以以任何方式写入该文件,因为网络服务器不会让他们这样做。Web 服务器服务于 Web 请求,它不向随机用户提供直接文件访问。

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

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

于 2013-08-28T17:43:31.653 回答