【问题标题】:Storing database credentials in PHP constans and security [duplicate]在 PHP 常量和安全性中存储数据库凭据 [重复]
【发布时间】:2012-02-22 10:29:17
【问题描述】:

可能重复:
Is it ever ok to store password in plain text in a php variable or php constant?

我曾经将我的数据库凭据存储在这样的 PHP 文件中:

<?php
    define('HOST', 'localhost');
    define('USER', 'db_user');
    define('PASS', 'user_pass');
    define('DB', 'database');
?>

我使用常量,但在最近的一个项目中,一位 PHP 编码人员表示将 db 凭据存储到常量中并不安全。我不明白。我试图找到一些信息,但没有人对此只字不提。

将 db 凭据存储到 PHP 常量中是否存在安全风险?

【问题讨论】:

    标签: php database security


    【解决方案1】:

    唯一的风险是如果您在文档根目录下有定义。在这种情况下,如果您的服务器配置出现问题并且人们可以看到您的 PHP 代码,那么常量(以及因此数据库凭据)将被暴露。

    最安全的方法(据我所知)是将凭据作为仅限于 root 的服务器环境的一部分。然后,开发人员可以使用_SERVER['db_user'] 等。这可能更安全,因为有权访问实际数据库凭据的人受到更多限制。它还使您可以灵活地根据服务器使用不同的凭据(例如,开发与生产)。但是,您可以看到所有带有phpinfo()var_dump($_SERVER) 等的服务器环境变量,因此您必须注意不要上传此类内容。

    【讨论】:

    • 我不知道。谢谢坦杜!
    【解决方案2】:

    将 db 凭据存储到 PHP 常量中是否存在安全风险?

    存储重要信息(例如数据库的用户名和密码)总是存在一些风险。

    但我无法想象使用常量比使用变量更具有安全风险。

    然而,一个潜在的风险是,配置是用代码编写的。所以它并不是真正的静态。使用不需要自己执行的配置文件可能更安全。

    【讨论】:

    • 是的。我不明白为什么常数可能有风险。问题是他告诉我们在 DB 类的属性中使用所有数据库凭据。所以 PDO 语句将是:$this-&gt;myconn = new PDO("mysql:host=".$this-&gt;db_host.";dbport=".$this-&gt;db_port.";dbname=".$this-&gt;db_name, $this-&gt;db_user, $this-&gt;db_pass);
    • 这实际上是一个更明智的决定。常量随处可用,如果您有私有对象成员,则需要具体知道位置。攻击者脚本定位凭据的工作量更大。除此之外(实际上不是很多,而是一点点),这听起来更明智的设计。
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多