NHIBERNATE LÀ GÌ

  -  

Thông thường Lúc áp dụng Nhibernate để cách tân và phát triển ứng dụng website tốt vận dụng winkhung bọn họ thường bỏ chuỗi kết nối nghỉ ngơi file hibernate.cfg.xml , bản thân thấy bỏ nuốm như thế nào ko bình an nên sau khoản thời gian google với tò mò mình đã tìm thấy phương pháp để cho vô webconfig cùng mã hóa chuỗi liên kết này đến nó an ninh nhằm mục đích tách shell

*

thường thì thì chuỗi liên kết cơ sở dữ liệu thường quăng quật nghỉ ngơi file hibernate.cfg.xml nhỏng sau :

Chuỗi kết nối các đại lý dữ liệu làm việc đây

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

public static class Cryplớn 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 Convert.ToBase64String(cipherTextBytes); public static string Decrypt(string data,pass) if (string.IsNullOrEmpty(data)) return "";

var initialVectorBytes = Encoding.ASCII.GetBytes(InitialVector); var cipherTextBytes = Convert.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 với giải mã theo pass một chuỗi, mục đích là mã hóa chuỗi kết nối.

Để sửa lại cách làm rước chuỗi liên kết ta override lại lớp NHibernate.Connection.DriverConnectionProvider nlỗi 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 lớn.Decrypt(connectionString,"sokhanh03"); return conn;

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

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

Chú ý comment lại cái NHibernate.Connection.DriverConnectionProvider

Sau kia vào tệp tin webconfig tuyệt phầm mềm.config sửa lại thành :

do đó ta đã chuyển chuỗi kết nối trường đoản cú file hibernate.cfg.xml quý phái tệp tin webconfig(tiện ích.config) vẫn mã hóa, kế tiếp thực hiện code thông thường.

Mục đích của việt này là tránh việc bị shell gọi tệp tin webconfig với đem chuỗi kết nối