NHIBERNATE LÀ GÌ

     

Thỉnh thoảng khi áp dụng Nhibernate nhằm phát triển phần mềm web hay ứng dụng winform chúng ta thường bỏ chuỗi kết nối ở tệp tin hibernate.cfg.xml , mình cảm thấy bỏ thế nào không bình yên và an toàn và đáng tin cậy nên sau khoản thời gian google cùng với thăm dò tôi đã tìm ra cách tiến hành để bỏ vào webconfig và mã hóa chuỗi liên kết này mang lại nó an toàn và an toàn nhằm né shell


*

Thỉnh thoảng thì chuỗi kết nối cơ sở dữ liệu thường bỏ ở tệp tin hibernate.cfg.xml như sau :

Chuỗi liên kết cơ sở tài liệu ở đây

Để mã hóa chuỗi kết nối ta viết một tấm là Crypto nhằm mã hóa and lời giải trước đã

public static class Crypto const string InitialVector = “4AQYuEmZ3Q7gNHdj”; public static string Encrypt(string data,string pass) if (string.IsNullOrEmpty(data)) return “”;

var initialVectorBytes = Encoding.ASCII.GetBytes(InitialVector); var plainTextBytes = Encoding.UTF8.GetBytes(data); var keyBytes = Encoding.ASCII.GetBytes(pass);

var symmetricKey = new RijndaelManaged(); symmetricKey.Mode = CipherMode.CBC; byte cipherTextBytes = null; using (var encryptor = symmetricKey.CreateEncryptor(keyBytes, initialVectorBytes)) using (var memStream = new MemoryStream()) using (var cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write)) cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); cryptoStream.FlushFinalBlock(); cipherTextBytes = memStream.ToArray(); memStream.Close(); cryptoStream.Close(); symmetricKey.Clear(); return chuyển đổi.ToBase64String(cipherTextBytes); public static string Decrypt(string data,pass) if (string.IsNullOrEmpty(data)) return “”;

var initialVectorBytes = Encoding.ASCII.GetBytes(InitialVector); var cipherTextBytes = gửi đổi.FromBase64String(data); var keyBytes = Encoding.ASCII.GetBytes(pass);

var symmetricKey = new RijndaelManaged(); symmetricKey.Mode = CipherMode.CBC; var plainTextBytes = new byte; var byteCount = 0; using (var decryptor = symmetricKey.CreateDecryptor(keyBytes, initialVectorBytes)) using (var memStream = new MemoryStream(cipherTextBytes)) using (var cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read)) byteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); memStream.Close(); cryptoStream.Close(); symmetricKey.Clear(); return Encoding.UTF8.GetString(plainTextBytes, 0, byteCount);

Mục đích của lớp này là mã hóa theo pass and lời giải theo pass một chuỗi, mục tiêu là mã hóa chuỗi kết nối.

Để làm cho lại cách thức lấy chuỗi liên kết ta override lại lớp NHibernate.Connection.DriverConnectionProvider như sau :

public class MyConnectionProvider : NHibernate.Connection.DriverConnectionProvider static string conn = “”; protected override string ConnectionString get if (string.IsNullOrEmpty(conn))

string connectionString = ConfigurationManager.ConnectionStrings.ConnectionString; conn= Crypto.Decrypt(connectionString,”sokhanh03″); return conn;

Sửa tệp tin hibernate.cfg.xml như sau :

(Name space của MyConnectionProvider).MyConnectionProvider,Name space của MyConnectionProvider

Chăm chú ý kiến lại cái NHibernate.Connection.DriverConnectionProvider

Sau kia vào tệp tin webconfig tuyệt app.config làm lại thành :

Như cầm cố ta đã gửi chuỗi kết nối từ tệp tin hibernate.cfg.xml sang tệp tin webconfig(app.config) đang mã hóa, tiếp đến thực hiện nay code các khi.

Mục đích của việt này là né bài toán bị shell đọc tệp tin webconfig and lấy chuỗi kết nối