2012-06-20 16 views
6

Estoy alojando una aplicación Yii en host compartido con algunos de mis amigos, y mantengo la base de datos en un servidor MySQL privado. Como se sabía, la información de la base de datos se puede encontrar de manera muy fácil en protected\config\main.php por otro propietario de acogida (mi amigo y más):¿Cómo la cadena de conexión protegida por la aplicación Yii?

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

¿Hay alguna solución para ocultar la información de conexión como el servidor IP de MySQL, nombre de usuario, contraseña?

¿Puede el servidor MySQL proporcionar el mecanismo RSA para proteger la información de la base de datos?

ejemplo, cualquier gente puede ver de la siguiente manera, pero no pueden entender o usar:

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

Si la información de "cómo autenticar a mi servidor SQL "reside en el servidor donde aloja su aplicación, y es accesible por Yii, entonces todos con acceso puede encontrar esa información. No importa si se trata de una contraseña de texto sin formato, un hash o una clave privada. –

+1

Puede usar cifrado bidireccional, [algo como esto] (http://www.99points.info/2010/06/php-encrypt-decrypt-functions-to-encrypt-url-data/). Haga los métodos estáticos y luego pase 'Encryption :: decode (my_encoded_username)' to 'username',' password', etc. No estoy seguro si Yii carga clases en el archivo de configuración, sin embargo. – adamors

+1

@ Örs: ¿Qué es lo que va a lograr? Debe obtener la clave de cifrado de algún lado. Si se puede acceder a ese lugar junto con su fuente, cualquier persona con acceso a la fuente puede descifrar la contraseña. Si no es así, simplemente ponga la contraseña allí y no hay necesidad de involucrar el cifrado. – Jon

Respuesta

6

No, no se puede ocultar las credenciales de alguien que tiene acceso al origen de todo el tiempo que está utilizando native MySql authentication. Esto se debe a que su código necesita pasar las credenciales como texto sin formato¹ al servidor, por lo que debe ser capaz de "descifrarlas" antes de conectarse. Alguien que tenga acceso a su fuente puede seguir el mismo procedimiento y descifrarlos también.

Puede proteger su sistema confiando en algún tipo de PAM authentication en lugar de las credenciales proporcionadas por el usuario, pero Yii no es compatible.


¹nota: Esto no es realmente cierto. El cliente pasa un hash hash al servidor, pero necesita tener acceso a la contraseña original para hash it. Esto significa que, a los fines de esta discusión, no hay diferencia (sería una diferencia para alguien que está escuchando en la red).

0

Usando Yii 1.x lo hice usando el siguiente método.

  1. crear una clase, DbConnection dentro protected/components que se extiende desde 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. Ajuste el archivo de configuración (protected/config/main.php) 'db' => array( 'class' => 'DbConnection', // Use above classname 'password' => 'encryptedpassword', ),

Cuestiones relacionadas