在启动时将DB密码和密钥加载到PHP内存中

时间:2011-08-31 22:24:42

标签: php password-protection

我有点担心将我的数据库用户名,密码和加密密钥放入一个PHP文件中,每个入侵服务器的人都可以轻松阅读。是否可以加载PHP并告诉它可能需要的密码?

我的问题很简单:除了将所有内容放在一个文件中之外,还有其他方法让PHP知道数据库密码和密钥吗?

欢迎任何想法。

3 个答案:

答案 0 :(得分:2)

据我所知,您必须在某个时刻声明您的变量才能启动数据库连接。但是,您可以做某些事情,使某人更难以阅读。

除了另一个答案中提到的安全编程实践之外,您可以确保只将密码存储在一个文件(例如Config.php)中,并将其包含在数据库连接函数中。此外,您可以将此变量存储在外部 Web根目录中,这意味着除非他们具有服务器访问权限,否则他们将无法访问它。

您还可以让获取访问权限的人更难阅读。这包括使用Symmetric Key Algorithm对其进行加密,然后在使用时对其进行解密。请注意,加密/解密密钥也必须存储在服务器上,这再次造成的不仅仅是不方便。

采取适当的安全措施来保护您的代码,并限制您的数据库,以便只能在本地访问它。这应该提供足够的安全性。

答案 1 :(得分:1)

从技术上讲,没有人能看到你的php脚本。无论如何,我刚刚将我的DB宏更新到最新标准。这就是我在CMS中做的事情:

config.php文件:

<?

if (!defined('A52CMS')) {die('What are you looking for? 0.o');}

$config_mysql = array(
    'database' => 'databasename1',
    'user' => 'username1',
    'password' => 'password1',
    'table_prefix' => 'a52_'
);

db_macros.php文件:

<?
if (!defined('A52CMS')) {die('What are you looking for? 0.o');}
class DB {
    protected $default_config = array(
        'server' => 'localhost',
        'database' => '',
        'user' => 'root',
        'password' => '',
        'table_prefix' => 'a52_',
        'mysql_config_array' => 'config_mysql'
    );
    function __construct ($config_mysql) {
        $this->config = array_merge($this->default_config, $config_mysql);
        /* There are some secret connection related stuff here */
        mysql_query("SET NAMES utf8");
        unset($this->config['password']);
        unset($GLOBALS[$this->config['mysql_config_array']]);
    }
    /* There are alot of mysql related functions here */
    function __destruct () {
        mysql_close($this->conn);
        if (@mysql_ping($this->conn)) {
            CriticalError('Closing mysql connection was unsuccessful!');
        }
    }
}

core.php文件:

<?

if (!defined('A52CMS')) {die('What are you looking for? 0.o');}

require('config.php');

// Lets try to display the mysql raw data
print_r($config_mysql); // displays something

require('db_macros.php');
$DB = new DB($config_mysql);

// Lets try to display the mysql raw data AGAIN
print_r($config_mysql); // displays nothing

index.php文件:

<?

define('A52CMS', true);

require('core.php');

// This where the content starts.. if some plugin is being included, then mysql data is already unset, so basically you cannot hack them..

您可能会了解如何使您的应用程序更安全一些。您也可以获得一些关于如何构建自定义mysql类的新想法(如果您还没有这样做过。)

答案 2 :(得分:0)

  • 制作安全脚本。如果你的脚本是安全的,就没有办法被黑了
  • 制作包含密码的脚本只能使用apache-readable
  • 确保您的密码文件不在网络范围内

我甚至没有看到另一种“保存”密码的方法,而不是这些