2012-06-20 9 views
6

Hostuję aplikację Yii na współdzielonym hoście z moim przyjacielem i utrzymuję bazę danych na prywatnym serwerze MySQL. Ponieważ wiedział, informacji w bazie można znaleźć tak bardzo łatwy w protected\config\main.php przez innego właściciela hosta (mój przyjaciel i więcej):Jak chronić ciąg połączenia aplikacji Yii?

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

Czy istnieje rozwiązanie, aby ukryć informacje o połączeniu jak IP serwera MySQL, nazwę użytkownika, hasło?

Czy serwer MySQL zapewnia mechanizm RSA do ochrony informacji o bazie danych?

przykład dowolny ludzie mogą zobaczyć, jak poniżej, ale nie może zrozumieć lub zastosowanie:

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

Jeśli informacje „jak uwierzytelnić na moim serwerze sql "znajduje się na serwerze, na którym hostujesz swoją aplikację, i jest dostępny dla Yii, a następnie dla wszystkich z dostępem mogą znaleźć te informacje. Bez względu na to, czy jest to zwykłe hasło, hash czy klucz prywatny. –

+1

Można użyć szyfrowania dwukierunkowego, [coś podobnego] (http://www.99points.info/2010/06/php-encrypt-decrypt-functions-to-encrypt-url-data/). Stwórz metody statyczne, a następnie przekaż 'Encryption :: decode (my_encoded_username)' na 'username',' password' itd. Nie jestem jednak pewien, czy Yii wczytuje klasy do pliku konfiguracyjnego. – adamors

+1

@ Örs: Co zamierza osiągnąć? Musisz pobrać klucz szyfrowania skądś. Jeśli to miejsce jest dostępne wraz ze źródłem, każdy, kto ma dostęp do źródła, może odszyfrować hasło. Jeśli tak nie jest, po prostu umieść tam samo hasło i nie ma potrzeby włączania szyfrowania. – Jon

Odpowiedz

6

Nie, nie można ukryć poświadczenia od kogoś, kto ma dostęp do źródła, o ile używasz native MySql authentication. Dzieje się tak, ponieważ twój kod musi przekazywać dane uwierzytelniające jako tekst jawny¹ na serwer, więc musi być w stanie "odszyfrować" je przed połączeniem. Ktoś, kto ma dostęp do Twojego źródła, może wykonać tę samą procedurę i odszyfrować je.

Można zabezpieczyć swój system, opierając się na pewnym typie PAM authentication zamiast poświadczeń dostarczonych przez użytkownika, ale Yii go nie obsługuje.


¹note: To nie jest prawda. Klient przekazuje serwer hash, ale musi mieć dostęp do oryginalnego hasła, aby je zaszyfrować. Oznacza to, że dla celów tej dyskusji nie ma różnicy (to by miało znaczenie dla kogoś, kto słucha w sieci).

0

Korzystanie z Yii 1.x Zrobiłem to za pomocą poniższej metody.

  1. utworzyć klasę, DbConnection wewnątrz protected/components rozciągający się od 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. Ustaw plik konfiguracyjny (protected/config/main.php) 'db' => array( 'class' => 'DbConnection', // Use above classname 'password' => 'encryptedpassword', ),

Powiązane problemy