الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تشفير Connection String

مغلق
بدأه osmansays في 18 يوليو 2006 · 7 رد · 1,879 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تشفير Connection String

مقدمة :

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

ولذا وجب تشفير نص الاتصال للوصول الى مستوى سرية أعلى لتطبيقاتنا ولا نخاف من نشرها للزبون التالي وهذا هو الشي الذي سنقوم باحتوائه في هذا المقال.

حفظ الـConnection String من غير تشفير :

لنلقي نظرة على شكل ملف الweb.config من دون أن نقوم بأي تشفير فانها ستكون بالشكل :

< configuration >
< appSettings >
< add key = "ConnectionString" value = "server = localhost;uid = sa;pwd =;database = DBPerson" / >
< /appSettings >
< /configuration >

Connection String وهذه هي أسوأ طريقة قد نكتب بها الـ حيث أنه بكل سهولة يمكننا رؤية اسم المستخدم وكلمة المرور (userid , passwordلقاعدة البيانات (

وبالتالي فان أي شخص بامكانه الاتصال بقاعدة البيانات والحصول على ما يريد .

فلنلقي نظرة على طريقة أفضل من السابقة :

< configuration >
< appSettings >
< add key = "DBConnStr"
value = "server = (local);Integrated Security = SSPI;database = northwind"/ >
< /appSettings >
< /configuration >

كما تلاحظ فان هذا الإتصال أكثر سرية من سابقه لعدم احتوائه على اسم المستخدم ولا كلمة المرور ولكنه لا يزال يحوي اسم قاعدة البينات !!!!

الان لنلقي نظرة على استخدام التشفير لكيلا يقوم أي مخترق بالوصول الى بيناتي السرية التي من الواجب علي توفير أعلى مستوى حماية لها .

في البداية سنقوم بكتابة دالة بسيطة نقوم بتمريرالـConnection String لها بدون تشفير كمعامل (parameter) وتقوم هذه الدالة بارجاع القيمة مشفرة وليكن اسمها EncryptConnectionString لتكون بالشكل التالي :

// 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;
}

شرح الكود :

1- تقوم الدالة بأخذ الـConnectionString وتعيده مشفراً .

2- قمنا باستخدام ASCIIEncoding التي تقوم باخذ البايتات لنص الاتصال وتقوم بحفظه في المصفوفة b .

3- قمنا بتشفير نص الاتصال عن طريق الدالة ToBase64String الموجودة ضمن الفئة convert وحفظ ناتج التشفير في المتغير النصي : encryptedConnectionString

4- تقوم الدالة بارجاع النص مشفراً .

واذ1 أحببت طباعة النص بعد التشفير عن طريق Response.Write(encryptedConnectionString) فانك ستحصل على النتيجة التالية :

ZGF0YSBzb3VyY2U9Llx2c2RvdG5ldDtpbml0aWFsIA0KICAgY2F0YWx

وهي نص الاتصال مشفراً ومن ثم نقوم بنسخه ولصقه داخل الweb.config ليصبح شك الملف بالشكل التالي :

< appSettings >
< add key = "ConnectionString"
value = "ZGF0YSBzb3VyY2U9Llx2c2RvdG5ldDtpbml0aWFsIA0KICAgY2F"/ >
< /appSettings >

وبالتالي تحقق لنا المطلوب وهو عدم قدرة أي متطفل على فهم نص الاتصال . قد يتبادر الى ذهنك سؤال وهو :

ولكن كيف ستقوم المكونات SqlConnection مثلاً بفهم هذا الرمز المشفر ؟؟؟!!!

الاجابة هي أن نقوم ببساطة بكتابة دالة بسيطة أخرى مثل سابقتها تقوم بعكس وظيفتها وهي فك التشفير ولتكن DecryptConnectionString والتي ستكون بالشكل :

// 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;
}

شرح الكود :

1- في البدأ تقوم الدالة بأخذ القيمة المشفرة من خلال ملف الweb.config .

2- نقوم بفك تشفير النص المأخوذ باستخدام نفس الدالة التي استخدمناها في التشفير ونقوم بارجاع القيمة بعد التشفير .

قد يدور في ذهنك ان أي شخص قد قرأ هذه المقالة فك تشفير التطبيق الخاص بي !!! ولكن لا اجزع فبامكانك اختيار الطريقة الأمثل لك في التشفير فالبعض قد يستخدم التشفير الى النظام الستعشري Hexadecimal على مستوى الحرف لذا فالخيار يعود اليك ولكن الطريقة التي قمنا باستخدمها هنا هي واحدة من أبسط خوارزميات التشفير التي يمكن تطبيقها .

#2

جزاك الله خير

460.gif

#3

واياك إن شاء الله ,

وشكرا على هذا التفاعل الذي كنت أتمنى أن أجده من بقية الشباب على بقية المقالات حتى تظل في صفحة البداية ويستفيد منها أكبر قدر ممكن من الاخوان ..

#4

أخي العزيز عثمان

عندما أضع الكود المذكور هنا ( وكذلك وجدته في أحد الكتب ) يظهر لي رسالة الخطأ التالية

Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 70, position 4.

مع العلم أن السطر رقم 70 يحتوي على الكود التالي

  <appSettings>

460.gif

#5

موضوع ممتاز شكرا لك

#6

جزاك الله خيراً

مقال مفيد للغاية

#7

رائع جدا بغض النظر عن طريقة التشفير لانني أفضل أن تكون بإستخدام مفتاح ما كي لا يستطيع أحد فك التشفير بينما في هذه الطريقة يمكن لأي شخص أحذ النص المشفر وفكه

هذا مجرد رأي ,,, بالتوفيق

تم تعديل هذه المشاركة بواسطة ابوأنس في 22 يوليو 2006 في 21:59

#8

تسلم على الموضوع

هذا الموضوع مغلق.

مواضيع مشابهة