【问题标题】:Where to store sensitive information in a Drupal Module?在 Drupal 模块中存储敏感信息的位置?
【发布时间】:2011-01-21 16:37:36
【问题描述】:

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

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

还有其他方法可以安全地存储这些信息吗?

【问题讨论】:

    标签: php security drupal drupal-7


    【解决方案1】:

    使用 settings.php,您走在了正确的轨道上。您可以use the $conf variable in settings.php 设置您可以使用variable_get 在模块中访问的变量。

    【讨论】:

    • 一个相关问题:为什么我不能写信给settings.php?它在 FTP 和 SSH 中的权限为 777,但我无法在 FTP 中编辑文件。有什么建议吗?
    • Command: STOR settings.php - Response: 553 Rename/move failure: Permission denied。让我澄清一下,我可以在 SSH 中编辑,而不是在 FTP 中
    • 您是否使用 ssh 中的其他帐户(使用 su 或其他)而不是您使用 FTP 的帐户进行编辑?
    【解决方案2】:

    嗯...这似乎是您通常不应该做的事情。编写一个位于您可以访问的远程数据库中的 API。

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

    当然有人可能会看到您包含该文件,但他们无法看到该文件本身,除非他们入侵了您的服务器(而不仅仅是 Drupal),在这种情况下,无论如何,您几乎都搞砸了。

    【讨论】:

    • drupal 保持 settings.php 文件的内容安全,将其放在文档根目录之外有它自己的安全问题。
    • @mirzu Drupal 只在 PHP 没有失败的情况下保证它的安全。文档根目录中不应包含包含登录名或密码等敏感信息的文件。特别是不适用于远程服务器。至少如果 MySQL 实例是本地的,您可以将其设置为仅接受来自 localhost 的传入通信。 (我不认为这个建议值得投反对票......)
    • 如果文件权限设置正确,即使没有 PHP 也不能通过 http 访问 settings.php 文件。如果用户具有本地访问权限,则将文件移出 web 根目录没有任何好处。允许远程数据库只接受来自该服务器的连接是一个很好的安全步骤,无论连接凭据如何存储都应该采取。
    • @mirzu 我真的很想知道什么文件权限会,如果你有 apache 运行但没有 PHP,如果他们导航到它但当你启用时阻止一个人在你的 doc 根目录中读取文件PHP,将允许 PHP 访问该文件。在这两种情况下读取文件的用户不会是 apache 吗?
    • 我很抱歉,你是正确的,如果 php 出现故障,没有什么可以阻止文件被读取。在本地进行测试:我对我的 http.conf 文件进行了相当多的更改,甚至让 apache 在没有 php 的情况下运行。现在我很好奇,在哪些情况下,除了修改 http.conf 之外,您是否会遇到 apache 继续运行而 php“宕机”的情况?
    【解决方案3】:

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

    【讨论】:

    • 那只是为了测试。但是,即使拥有如此巨大的开放权限,我也无法通过 FTP 写入文件。你对此有什么建议吗?
    • @TheLQ 如果您无法通过 FTP 写入 chmod 777 文件,那么文件权限不是问题。此外,使用 FTP 是一个非常严重的漏洞。您应该使用 SFTP 或 FTPS。
    • 那么问题出在哪里?我可以写入除此之外的每个文件,Drupal 以某种方式锁定了该文件。我正在使用 FTPES。但我通常不会每次都指定
    • @TheLQ 如果文件已打开以进行写入,那么您将无法覆盖它。老实说,可能还有其他问题,请询问 serverfault。
    猜你喜欢
    • 2012-12-26
    • 2022-01-17
    • 2015-05-03
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多