NHIBERNATE LÀ GÌ

  -  

Thỉnh phảng phất lúc vận dụng Nhibernate để phát triển ứng dụng website tốt ứng dụng winkhung các bạn hay quăng quật chuỗi liên kết sinh sống tệp tin hibernate.cfg.xml , mình Cảm Xúc vứt cố kỉnh nào không an ninh và tin cậy bắt buộc sau thời điểm google với dò xét tôi đã tìm ra cách làm nhằm cho vô webconfig & mã hóa chuỗi liên kết này mang lại nó bình an cùng an toàn và tin cậy nhằm mục tiêu né shell


*

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

Chuỗi kết nối đại lý dữ liệu ngơi nghỉ đây

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

public static class Crypto lớ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 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 = Chuyển đổ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 và lời giải theo pass một chuỗi, mục tiêu là mã hóa chuỗi liên kết.

Để làm cho lại cách thức đem chuỗi liên kết ta override lại lớp NHibernate.Connection.DriverConnectionProvider nhỏng 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= Cryplớ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ăm chụ bình luận lại dòng NHibernate.Connection.DriverConnectionProvider

Sau kia vào tệp tin webconfig hay ứng dụng.config có tác dụng lại thành :

Nlỗi vắt ta đã gửi chuỗi kết nối từ tệp tin hibernate.cfg.xml thanh lịch tệp tin webconfig(tiện ích.config) vẫn mã hóa, kế tiếp tiến hành code đôi lúc.

Mục đích của việt này là né câu hỏi bị shell gọi tệp tin webconfig & lấy chuỗi kết nối