【问题标题】:Pass DB credential with htaccess使用 htaccess 传递数据库凭据
【发布时间】:2020-07-04 04:05:04
【问题描述】:

我正在尝试保护一个包含一些数据库信息的 inc 文件,我正在使用 htacess 来保护该文件。

我想要的是以下内容:只允许 php 脚本获取这些信息以记录到数据库。

我的 Webroot 看起来像这样:imgWebRoot

我的 .htacess 代码如下所示:

<files sql.cnf>
Order Allow,Deny
Deny from all
allow from indexa.php
</files>

我的 php 文件:

   parse_ini_file("C:\Apache24\htdocs\sql.cnf");
    echo $_SERVER[‘DB_LOGIN’]; // login

我的 sql.cnf 文件

SetEnv DB_LOGIN “login”
SetEnv DB_PASSWD “password”
SetEnv DB_DB “my_database”
SetEnv DB_HOST “127.0.0.1”

我的问题是我无法登录到 php 文件,我不明白为什么?

ImgError

zf.png

【问题讨论】:

    标签: php database apache security


    【解决方案1】:

    由于您使用的是 Apache,您可以将变量添加到 httpd.conf 文件的末尾,如下所示,然后通过引用 $_SERVER 全局变量来访问它们:

    SetEnv VAR_NAME strongpassword123
    

    我认为不需要引用这些值。重新启动 Apache 服务后,您将能够使用 $_SERVER['VAR_NAME'] 引用您的值。无需在应用逻辑中parse_ini_file 单独的文件。

    此外,您不应依赖 htaccess 来保护凭据。如果您需要将凭据存储在应用服务器上的文件中而不是作为环境变量,则应将它们存储在 Web 根目录之上。

    例如,下面的代码会在名为 config 的目录中找到存储在 webroot 上一层的文件。

    require("$_SERVER[DOCUMENT_ROOT]/../config/config.php");
    

    【讨论】:

    • 感谢您的回答,这很有帮助,您知道如何使 cofig.php 只能由 index.php(根目录中的文件)访问吗?
    • @Alae - 你是否试图阻止其他 PHP 脚本访问配置文件?
    • 是的,特别是为了维护数据库凭据的安全性(没有人可以访问这些信息 = 没有人可以打开/读取配置文件)
    • 正确 - 所以我强烈建议使用 httpd.conf 文件将它们存储为环境变量。现实情况是,在您的应用服务器上执行的任何 PHP 脚本都必须在某种程度上受到信任。我不知道将文件访问限制为单个 PHP 脚本的方法。如果恶意用户可以访问源代码,他们可以简单地覆盖您的索引文件以转储凭据。
    猜你喜欢
    • 2017-11-26
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2014-11-04
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多