2012-06-20 31 views
6

Tôi đang lưu trữ ứng dụng Yii trên máy chủ chia sẻ với một số người bạn của tôi và giữ cơ sở dữ liệu trong máy chủ MySQL riêng tư. Như bạn đã biết, thông tin cơ sở dữ liệu có thể được tìm thấy cho đến rất dễ dàng trong protected\config\main.php bởi một chủ sở hữu máy chủ (bạn và nhiều hơn nữa của tôi):Cách chuỗi kết nối được bảo vệ bởi ứng dụng Yii?

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

Có giải pháp nào để che giấu thông tin kết nối như IP mySQL máy chủ, tên người dùng, mật khẩu?

Máy chủ MySQL có thể cung cấp cơ chế RSA để bảo vệ thông tin cơ sở dữ liệu không?

Ví dụ, bất kỳ người có thể thấy như sau nhưng không thể hiểu hoặc sử dụng:

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

Nếu thông tin "làm thế nào để xác thực tại máy chủ sql của tôi "nằm trên máy chủ nơi bạn lưu trữ ứng dụng của mình và ứng dụng có thể truy cập bởi Yii, sau đó mọi người với quyền truy cập có thể tìm thấy thông tin đó. Không có vấn đề cho dù đó là một mật khẩu thuần văn bản, một băm hoặc một khóa riêng. –

+1

Bạn có thể sử dụng mã hóa hai chiều, [một cái gì đó như thế này] (http://www.99points.info/2010/06/php-encrypt-decrypt-functions-to-encrypt-url-data/). Làm cho các phương thức tĩnh và sau đó vượt qua 'Mã hóa :: giải mã (my_encoded_username)' thành 'username',' password' vv. Tôi không chắc chắn nếu Yii tải các lớp trong tệp cấu hình, tuy nhiên. – adamors

+1

@ :rs: Điều đó sẽ làm gì? Bạn cần lấy khóa mã hóa từ đâu đó. Nếu một nơi nào đó có thể truy cập được cùng với nguồn của bạn, bất kỳ ai có quyền truy cập vào nguồn đều có thể giải mã mật khẩu. Nếu không, chỉ cần đặt mật khẩu ở đó và không cần phải liên quan đến mã hóa. – Jon

Trả lời

6

Không, bạn không thể che giấu các thông tin từ những người có quyền truy cập vào mã nguồn của bạn miễn là bạn đang sử dụng native MySql authentication. Đó là vì mã của bạn cần truyền thông tin đăng nhập dưới dạng cleartext¹ đến máy chủ, vì vậy, mã cần phải có khả năng "giải mã" chúng trước khi kết nối. Người nào đó có quyền truy cập vào nguồn của bạn có thể làm theo cùng một quy trình và giải mã chúng.

Bạn có thể bảo mật hệ thống của mình bằng cách dựa vào một số loại PAM authentication thay vì thông tin xác thực do người dùng cung cấp, nhưng Yii không hỗ trợ như vậy.


Chú thích: Điều này không thực sự đúng. Khách hàng chuyển một số băm băm đến máy chủ, nhưng nó cần phải có quyền truy cập vào mật khẩu ban đầu để băm nó. Điều này có nghĩa rằng với mục đích của cuộc thảo luận này, nó không tạo ra sự khác biệt (nó sẽ tạo sự khác biệt cho người đang lắng nghe trên mạng).

0

Sử dụng Yii 1.x Tôi đã làm điều đó bằng phương pháp bên dưới.

  1. tạo ra một lớp, DbConnection bên protected/components kéo dài từ 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. Điều chỉnh tập tin cấu hình (protected/config/main.php) 'db' => array( 'class' => 'DbConnection', // Use above classname 'password' => 'encryptedpassword', ),