如何 Yii 应用受保护的连接字符串


How to Yii app protected connection string?

我正在与我的一些朋友在共享主机上托管一个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

不,只要您使用本机 MySql 身份验证,就无法向有权访问您的源的人隐藏凭据。这是因为您的代码需要将凭据作为明文¹传递给服务器,因此它需要能够在连接之前"解密"它们。有权访问您的源的人也可以按照相同的过程对其进行解密。

你可以依靠某种类型的 PAM 认证而不是用户提供的凭据来保护你的系统,但 Yii 不支持这样的认证。


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

使用 Yii 1.x 我使用以下方法做到了。

  1. 创建一个类,DbConnection内部protected/componentsCDbConnection扩展 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', ),