بسم الله الرحمن الرحيم ...

 من الأمور المهمة في لغة ASP.NET 2.0 ملف الـ Web.Config و الذي يقوم بتخزين التعريفات المهمة لتطبيق الويب.

و من أشهر و أهم المعلومات التي تخزن فيه هي الـ ConnectionString و التي يخزن بداخلها اسم المستخدم و كلمة مرور قواعد البيانات و عنوان سيفر قاعدة البيانات. كما أنه من الأمور المهمة التي تخزن في ملف الـ Web.Config معلومات الـ SMTP Server.

و بالرغم من أن الـ ASP.NET يتكفل بحماية ملف الـ Web.Config و لكن ماذا لو نسينا أن تغلق وصول الـ anonymous للـ FTP مثلاً؟!! سوف يصل بشكل مباشر إلى الـ Web.Config و يقرأه عن طريق الـ Notepad و سوف يجد جميع معلوماتنا الفيمة بداخله.

لذلك كان من أفضل التطبيقات في حماية ملف Web.Config هو تشفير الأجزاء المهمه.

 

سوف ننشئ الـ Methods التالية لتشفير و فك تشفير هذه الاجزاء بلغة السي#.

private void ProtectSection(string sectionName, string provider)
    {  
        Configuration config =
            WebConfigurationManager.
                OpenWebConfiguration(Request.ApplicationPath); 

        ConfigurationSection section =
                     config.GetSection(sectionName);

        if (section != null &&
                  !section.SectionInformation.IsProtected)
        {
            section.SectionInformation.ProtectSection(provider);
            config.Save();
        }
    }

    private void UnProtectSection(string sectionName)
    {
        Configuration config =
            WebConfigurationManager.
                OpenWebConfiguration(Request.ApplicationPath);

        ConfigurationSection section =
                  config.GetSection(sectionName);

        if (section != null &&
              section.SectionInformation.IsProtected)
        {
            section.SectionInformation.UnprotectSection();
            config.Save();
        }
    }

في الدالة ProtectSection تأخذ هذه الدالة قيمتين هي sectionName و provider.

الـ sectionName تأخذ القسم المراد تشفيره مثلاً "appSettings" و المتغير الثاني provider يأخذ طريقة التشفير و يوجد عندنا طريقتين هما:

  • The Windows Data Protection API (DPAPI) Provider(DataProtectionConfigurationProvider)
  • RSA Protected Configuration Provider(RSAProtectedConfigurationProvider)

فالنوع الأول يقوم بالتشفير بناءً على مفتاح الجهازmachine key و لذلك عند نقل الكود إلى جهاز آخر لن يصبح التشفير فعال.

و النوع الآخر يستخدم مفتاح الـ RSA و هنا سوف استخدم النوع الأول و لاستخدام الـ RSA يمكنك البحث في Google.

الآن لنضع 2 Buttons في صفحة الـ ASP.NET. و نكتب بداخلها الكود التالي للتشفير:

ProtectSection("appSettings","DataProtectionConfigurationProvider");

 

و لفك التشفير:

UnProtectSection("appSettings");

 

فلو فرضنا انه يوجد لدينا هذا الجزء في ملف الـ Web.Config:

و الذي يحتوي على سم المستخدم و كلمة المرور.

<?xml version="1.0"?>


<configuration>
  <appSettings>
    <add key="userName" value="myUser" />
    <add key="password" value="myPass" />
  </appSettings> 
 <system.web>

و الآن و بعد التشفير سوف يكون شكل الملف:

<?xml version="1.0"?>


<configuration>
  <appSettings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAeqpnrspy5EWNYcNck7YWEgQAAAACAAAAAAADZgAAqAAAABAAAAA12J8TxeAXP5oTR3FRwzTUAAAAAASAAACgAAAAEAAAAD35nzw5BzWwX4kb/ba0k+/oAAAAWrmf/KLUkGMXbc24Un8GXU/q3BLDnuzemCXU2ooqlXVVRCJdOSxU/A34EajaAmPZH/hJY1lDHoqSL2yv69R7Ld2ebIMyA94+gpGJ+5BttQhaUrD8yi19D7j29JOtX1gZ+6dkLVLANI4zU4i46orH7Syy+DOdwaeJ5ZNrj60hu7bSzwMgq5QEKXJ0G/D8XwJY7LD2pdpzls+P7fheqYH5OXFevJKoJWUco+isMdrppE5zPnIF9zD2pmLFU6bUH0maBDjbBnP3QCu+9R3SlQ5ELVQAKx+ThCj3xBvh5P1cUBMaaFZtEaX3EBQAAABl+Fga/ikPCJAGBh1NQNICVKh3Yg==</CipherValue>
      </CipherData>
    </EncryptedData>
  </appSettings>



 <system.web>

 

و لابد من العلم أن الأجزاء التالية لا يمكن تشفيرها في الـ Web.Config:

  • processModel
  • runtime
  • mscorlib
  • startup
  • system.runtime.remoting
  • configProtectedData
  • satelliteassemblies
  • cryptographySettings
  • cryptoNameMapping
  • cryptoClasses
  •  

    طبعاً الجزء الأجمل أنه عندما تريد قراءة قيمة معينة في ملف الـ Web.Config مثلاً الـ connectionString لن تقوم بفك التشفير و لكن الـ ASP.NET سوف يقوم به نيابة عنك و لن تضطر لتغيير الكود.

     

    أما لكيفية تشفير أجزاء ملف الـ Web.Config عن طريق الـ .NET Command Line يمكنك الرجوع إلى هذا الرابط في MSDN.

     

    مع تمنايتي لكم بالتوفيق...

    طلال السبيعي.

    Del.icio.usDigg It!DZone It!Reddit

    التصنيف: .NET , ASP.NET , C# , أمن المعلومات
    البطاقات: , , ,

    التعليقات

    اضف تعليق


    (سيظهر Gravatar أيقونة)  

      Country flag

    biuquote
    • تعليق
    • استعراض
    Loading



    البحث



    إخلاء مسؤولية
    جميع الآراء التي تم التعبير عنها هنا هي آرائي الشخصية وهذه الاّراء لا تمثل وجهة نظر عملي على أي حال.
    © جميع الحقوق محفوظة 2008 مدونة طلال




    Sign in