2012-02-08 68 views
11

Khung chơi [Tôi đang sử dụng v1.2.3] không hỗ trợ mã hóa mật khẩu db được lưu trữ trong tệp tin application.conf. Điều này được lưu trữ dưới dạng tệp văn bản thuần túy. DBPlugin đọc thuộc tính này và tạo một nhóm kết nối.Mã hóa mật khẩu db trong application.conf

Yêu cầu là mã hóa mật khẩu này - ví dụ: sử dụng Jasypt. Một số doanh nghiệp thực thi điều này như một biện pháp an ninh.

Có ai đã thử làm một cái gì đó như thế này không?

Vì tải DBPlugin trên ApplicationStart, không có cách nào để hack nó. Điều đó để viết một plugin tùy chỉnh và onConfigurationRead đặt một giá trị mới cho thuộc tính db.password của thuộc tính application.conf.

Mọi đề xuất?

+1

Câu hỏi thú vị, bạn cũng có thể đăng câu hỏi này lên [Play Google group] (http://groups.google.com/group/play-framework) để đảm bảo bạn nhận được mức độ phù hợp tối đa. – tmbrggmn

Trả lời

11

Cuối cùng, tôi đã khắc phục điều này bằng cách viết một Plugin phát. Viết một plugin Play cũng rất dễ dàng. Đây là đoạn mã mẫu:

package plugin; 

import java.util.Properties; 

import org.jasypt.util.text.StrongTextEncryptor; 

import play.Play; 
import play.PlayPlugin; 

public class DBPasswordInject extends PlayPlugin { 

    @Override 
    public void onConfigurationRead() { 
     StrongTextEncryptor strongTextEncryptor = new StrongTextEncryptor(); 
     strongTextEncryptor.setPassword("$Look##$2");// this password has been used to encrypt 

     String encryptedPassword = Play.configuration.getProperty("db.pass"); 
     String decrypted = strongTextEncryptor.decrypt(encryptedPassword); 
     Play.configuration.setProperty("db.pass", decrypted); //override 

     super.onConfigurationRead(); 
    } 

} 

Nhược điểm duy nhất là tôi đã không thể sử dụng org.jasypt.util.password.StrongPasswordEncryptor - vì không có phương pháp giải mã.

+0

Nếu bạn sử dụng lớp org.jasypt.encryption.StringEncryptor bạn có quyền truy cập vào cả mã hóa và giải mã –

1

Vấn đề là mật khẩu nào nên được sử dụng để mã hóa mật khẩu? Nếu bạn sử dụng mật khẩu mặc định thì cũng không an toàn. Nếu bạn đặt nó vào tập tin cấu hình bạn có một vấn đề đệ quy. Giải pháp duy nhất tôi thấy là sử dụng plugin của riêng bạn, nơi mật khẩu được lưu trữ và thay đổi các giá trị trong thuộc tính ứng dụng. Sau đó, mật khẩu có thể được lưu trữ crytped không có vấn đề. Ít nhất trong Play1.x.

+0

jasypt cho phép mật khẩu mã hóa được tra cứu tại thời gian chạy từ hệ thống env hoặc thuộc tính java. Mật khẩu đó không bao giờ cần được kiểm tra vào hệ thống kiểm soát nguồn hoặc có vấn đề về vòng tròn mà bạn đã đánh dấu. –

+0

Vui lòng không bao giờ đặt mật khẩu vào dòng lệnh. Nếu bạn sử dụng một propertyfile khác, bạn có thể sử dụng trực tiếp chức năng play-play. – niels

Các vấn đề liên quan