如何使用应用程序保护连接字符串?

时间:2012-06-20 09:41:58

标签: php mysql yii connection-string password-protection

我正在与我的朋友在共享主机上托管Yii应用程序,并将数据库保存在私有MySQL服务器中。如您所知,其他主持人(我的朋友等)protected\config\main.php可以很容易地找到数据库信息:

'db'=>array(
     'connectionString' => 'mysql:host=211.113.2.45;dbname=FamilyBook',
     'emulatePrepare' => true,
     'username' => root,
     'password' => 'xcute445',
     'charset' => 'utf8',
),

有没有任何解决方案可以将连接信息隐藏为IP mySQL服务器,用户名,密码?

可能MySQL服务器提供RSA机制来保护数据库信息吗?

例如,任何人都可以看到如下但无法理解或使用:

'db'=>array(
     'connectionString' => '57bf064b2166366a5ea61109006b8d5c',
     'emulatePrepare' => true,
     'username' => '63a9f0ea7bb98050796b649e85481845',
     'password' => 'e04ccf211208f8c97e4a36e584926e60',
     'charset' => 'utf8',
), // value by MD5 function, example only

2 个答案:

答案 0 :(得分:6)

不,只要您使用native MySql authentication,就无法隐藏有权访问您的来源的人的凭据。那是因为您的代码需要将凭证作为明文¹传递给服务器,因此它需要能够在连接之前“解密”它们。有权访问您的来源的人可以遵循相同的程序并解密它们。

您可以依靠某种类型的PAM authentication而非用户提供的凭据来保护您的系统,但Yii不支持此类。


¹note:事实并非如此。客户端将哈希传递给服务器,但它需要访问原始密码才能对其进行哈希处理。这意味着,对于本次讨论而言,它没有任何区别(对于正在网络上收听的人来说,这会有所不同。)

答案 1 :(得分:0)

使用Yii 1.x我使用以下方法完成。

  1. DbConnectionprotected/components内创建一个类CDbConnection class DbConnection extends CDbConnection { public function createPdoInstance() { // Decrypt the password used in config file // e.g.: $this->password = mydecrypt($this->password); return parent::createPdoInstance(); } }

  2. 调整配置文件(protected/config/main.php 'db' => array( 'class' => 'DbConnection', // Use above classname 'password' => 'encryptedpassword', ),