Php Drupal模块中的敏感信息存储在哪里?

Php Drupal模块中的敏感信息存储在哪里?,php,security,drupal,drupal-7,Php,Security,Drupal,Drupal 7,在我创建的模块中,我需要安全地存储一些敏感信息:远程数据库主机、用户名和密码 看起来唯一可用的存储是Drupal数据库,这让我很担心,因为这意味着如果Drupal受到威胁,那么其他数据库也会受到影响。sites/all/default中的settings.php文件是我的第二个选择,但我在写入它时遇到了问题。FTP和SSH至777和666中的各种chmod命令将无法打开文件进行写入。我也不确定我在那里设置的变量是否在其他地方可用 是否有其他安全存储此信息的方法 Hmmm。。。这似乎是你一般不应该

在我创建的模块中,我需要安全地存储一些敏感信息:远程数据库主机、用户名和密码

看起来唯一可用的存储是Drupal数据库,这让我很担心,因为这意味着如果Drupal受到威胁,那么其他数据库也会受到影响。
sites/all/default
中的
settings.php
文件是我的第二个选择,但我在写入它时遇到了问题。FTP和SSH至777和666中的各种
chmod
命令将无法打开文件进行写入。我也不确定我在那里设置的变量是否在其他地方可用


是否有其他安全存储此信息的方法

Hmmm。。。这似乎是你一般不应该做的事情。编写一个位于您可以访问的远程数据库的API

但是,如果您坚持直接访问数据库。将主机、用户名和密码硬编码到文件中,将文件放在文档根目录之外,并从那里包含它。例如,如果您的文档根(即Drupal的index.php文件所在的位置)是/www/htdocs,请将包含该信息的文件放在类似/www/secure的位置,并将其包含在您需要的位置。然后,如果php由于某种原因停止工作,则文件不在外部世界可读的位置,但php可以根据需要将其包含在站点中


当然,有人可能会看到您包含了该文件,但除非他们入侵了您的服务器(而不仅仅是Drupal),否则他们将无法看到该文件本身。在这种情况下,您的服务器将非常糟糕。

您使用settings.php的方法是正确的。您可以使用配置文件来设置可以在模块中访问的变量。

使用配置文件是此类信息的理想选择。然而,使用chmod 777或666是一个非常糟糕的想法。问题是这两种设置都允许文件全局读/写。因此,如果您在共享主机上,那么系统上的其他用户可能会访问您的文件。安装时,尝试使用php的chmod()函数对文件执行chmod 500。(在大多数情况下,500应该可以工作,最重要的是最后一个数字是零)。

相关问题:为什么我不能写入
settings.php
?它的权限在FTP和SSH中为777,但我无法在FTP中编辑该文件。有什么建议吗?
命令:STOR settings.php
-
响应:553重命名/移动失败:权限被拒绝
。让我澄清一下,我可以在SSH中进行编辑,但不能在FTPAre中进行编辑。您可以在SSH中使用不同的帐户(使用su或其他方式)进行编辑,而不是使用FTP进行编辑?这只是为了测试。然而,即使有巨大的开放权限,我也不能通过FTP写入文件。您对此有什么建议吗?@TheLQ如果您不能通过FTP写入chmod 777文件,则文件权限没有问题。此外,使用FTP是一个非常严重的漏洞。您应该使用SFTP或FTPS。那么问题是什么?除了这个文件,我还可以写入每个文件,Drupal不知怎么锁定了这个文件。我正在使用FTPES。但我通常不会指定每一个time@TheLQ如果文件已打开进行写入,则您将无法覆盖它。老实说,可能还有另一个问题,ask serverfault.drupal会确保settings.php文件的内容安全,而将其放在文档根目录之外也有其自身的安全问题。@mirzu drupal只会在php没有失败的情况下保持安全。文档根目录中不应包含包含登录名或密码等敏感信息的文件。特别是对于远程服务器。至少,如果MySQL实例是本地的,您可以将其设置为仅接受来自本地主机的传入通信。(我认为这个建议不值得否决……)如果文件权限设置正确,即使没有PHP,settings.PHP文件也不应该通过http访问。如果用户具有本地访问权限,则将文件从web根目录中删除没有任何好处。允许远程数据库只接受来自此服务器的连接是一个很好的安全步骤,无论连接凭据是如何存储的,都应该这样做。@mirzu我真的很想知道,如果您运行的是apache而不是PHP,如果用户导航到文档根目录中的某个文件,但当您启用PHP时,将允许PHP访问该文件,则停止该用户读取该文件。在这两种情况下,读取文件的用户都是apache吗?很抱歉,您是正确的,如果php关闭,则没有任何东西可以阻止读取文件。为了在本地测试这一点:我对我的http.conf文件做了很多更改,甚至让apache在没有php的情况下运行。现在我很好奇,在什么情况下,因为修改http.conf,如果apache继续运行,php“停止”,您会遇到什么情况?