السلام
مزحبا بك في منتدانا . يمكنك التسجيل والمشاركة. ننتظرك
السلام
مزحبا بك في منتدانا . يمكنك التسجيل والمشاركة. ننتظرك
السلام
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.


salam
 
الرئيسيةالبوابةأحدث الصورالتسجيلدخول

 

 تشفير Connection String

اذهب الى الأسفل 
كاتب الموضوعرسالة
Admin
Admin



عدد المساهمات : 234
تاريخ التسجيل : 30/10/2012

تشفير Connection String Empty
مُساهمةموضوع: تشفير Connection String   تشفير Connection String I_icon_minitimeالجمعة نوفمبر 02, 2012 1:50 am

مقدمة :
من الأشياء التي وجدناها بكثرة في المقالات وينصح بها دائما هي كتابة
الConnection Strting داخل ملف الـweb.config وما لذلك من فوائد عديدة من
حيث سهولة التعديل على المشروع لاحقاً اذا تم تغيير اسم الملقم أو اذا تم
نشره الى عميل اخر وكذلك سخولة ادارة الكود و ضمان توحد الاتصال لكل صفحات
المشروع ولكن هذه الفكرة التي دأب الكثير منا على القيام بها تحوي مخاطرة
كبيرة وهي سرية نص الاتصال Connection String الذي يحمل نص لبيانات الاتصال
كاملة من اسم ملقم قاعدة البيانات الى كلمة المرور ؟؟؟ مما يشكل خطراً
كبيراً فكل من بامكانه الوصول الى هذا الملف وفتحه عن طريق المذكرة فسيصبح
مستوى السرية للتطبيق أقرب للصفر .
ولذا وجب تشفير نص الاتصال للوصول الى مستوى سرية أعلى لتطبيقاتنا ولا نخاف
من نشرها للزبون التالي وهذا هو الشي الذي سنقوم باحتوائه في هذا المقال.

حفظ الـConnection String من غير تشفير :
لنلقي نظرة على شكل ملف الweb.config من دون أن نقوم بأي تشفير فانها ستكون بالشكل :
الكود:
[b][font=Times New Roman]< configuration >
< appSettings >
< add key = "ConnectionString" value = "server = localhost;uid = sa;pwd =;database = DBPerson" / >
< /appSettings >
< /configuration >[/font][/b]

Connection String وهذه هي أسوأ طريقة قد نكتب بها الـ حيث أنه بكل سهولة
يمكننا رؤية اسم المستخدم وكلمة المرور (userid , passwordلقاعدة البيانات (
وبالتالي فان أي شخص بامكانه الاتصال بقاعدة البيانات والحصول على ما يريد .
فلنلقي نظرة على طريقة أفضل من السابقة :

الكود:
[b][font=Times New Roman]< configuration >
< appSettings >
< add key = "DBConnStr"
value = "server = (local);Integrated Security = SSPI;database = northwind"/ >
< /appSettings >
< /configuration >[/font][/b]
كما
تلاحظ فان هذا الإتصال أكثر سرية من سابقه لعدم احتوائه على اسم المستخدم
ولا كلمة المرور ولكنه لا يزال يحوي اسم قاعدة البينات !!!!

الان لنلقي نظرة على استخدام التشفير لكيلا يقوم أي مخترق بالوصول الى
بيناتي السرية التي من الواجب علي توفير أعلى مستوى حماية لها .
في البداية سنقوم بكتابة دالة بسيطة نقوم بتمريرالـConnection String لها
بدون تشفير كمعامل (parameter) وتقوم هذه الدالة بارجاع القيمة مشفرة وليكن
اسمها EncryptConnectionString لتكون بالشكل التالي :
الكود:
[b][font=Times New Roman]// This method is used to encrypt the connection string
private string EncryptConnectionString(string connectionString)
{
Byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes(connectionString);
string encryptedConnectionString = Convert.ToBase64String(b);
return encryptedConnectionString;
}[/font][/b]
شرح الكود :
1- تقوم الدالة بأخذ الـConnectionString وتعيده مشفراً .
2- قمنا باستخدام ASCIIEncoding التي تقوم باخذ البايتات لنص الاتصال وتقوم بحفظه في المصفوفة b .
3- قمنا بتشفير نص الاتصال عن طريق الدالة ToBase64String الموجودة ضمن
الفئة convert وحفظ ناتج التشفير في المتغير النصي :
encryptedConnectionString
4- تقوم الدالة بارجاع النص مشفراً .
واذ1 أحببت طباعة النص بعد التشفير عن طريق Response.Write(encryptedConnectionString) فانك ستحصل على النتيجة التالية :
ZGF0YSBzb3VyY2U9Llx2c2RvdG5ldDtpbml0aWFsIA0KICAgY2F0YWx
وهي نص الاتصال مشفراً ومن ثم نقوم بنسخه ولصقه داخل الweb.config ليصبح شك الملف بالشكل التالي :
الكود:
[b][font=Times New Roman]< appSettings >
< add key = "ConnectionString"
value = "ZGF0YSBzb3VyY2U9Llx2c2RvdG5ldDtpbml0aWFsIA0KICAgY2F"/ >
< /appSettings >[/font][/b]
وبالتالي تحقق لنا المطلوب وهو عدم قدرة أي متطفل على فهم نص الاتصال . قد يتبادر الى ذهنك سؤال وهو :
ولكن كيف ستقوم المكونات SqlConnection مثلاً بفهم هذا الرمز المشفر ؟؟؟!!!
الاجابة هي أن نقوم ببساطة بكتابة دالة بسيطة أخرى مثل سابقتها تقوم بعكس
وظيفتها وهي فك التشفير ولتكن DecryptConnectionString والتي ستكون بالشكل :
الكود:
[b][font=Times New Roman]// This method is used to decrypt the connection string
private string DecryptConnectionString()
{
Byte[] b = Convert.FromBase64String(ConfigurationSettings.AppSettings["ConnectionString"]);
string decryptedConnectionString = System.Text.ASCIIEncoding.ASCII.GetString(b);
return decryptedConnectionString;
}[/font][/b]
شرح الكود :
1- في البدأ تقوم الدالة بأخذ القيمة المشفرة من خلال ملف الweb.config .
2- نقوم بفك تشفير النص المأخوذ باستخدام نفس الدالة التي استخدمناها في التشفير ونقوم بارجاع القيمة بعد التشفير .
قد يدور في ذهنك ان أي شخص قد قرأ هذه المقالة فك تشفير التطبيق الخاص بي
!!! ولكن لا اجزع فبامكانك اختيار الطريقة الأمثل لك في التشفير فالبعض قد
يستخدم التشفير الى النظام الستعشري Hexadecimal على مستوى الحرف لذا
فالخيار يعود اليك ولكن الطريقة التي قمنا باستخدمها هنا هي واحدة من أبسط
خوارزميات التشفير التي يمكن تطبيقها .



الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://salam.forum-canada.com
 
تشفير Connection String
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
السلام :: منتدى لغات برمجة :: منتدى Microsoft Visual Basic-
انتقل الى: