-->

أول درس من دورة حماية مواقع وسكربتات php ،

6:58 ص
السلام عليكم ورحمة الله تعالى وبركاته ،

أهلا إخواني الكرام في أول درس من دورة حماية مواقع وسكربتات php ،

من أول الدروس التي سنتطرق إليها هي الحماية من تغرة sql injection ، والتي تعتبر من أخطر التغرات على الإطلاق ،

لا أريد أن أطول في شرح التغرة كتابيا ، ولكن بشكل عام ، لو كنت تبرمج موقعا ما ، ووضعت query ، وكان في الquery متغير تستقبل قيمته عن طريق الـurl 

يعني مثلا القيمة تأتي عن طريق _POST أو _GET ، فتلك القيمة تبقى للزائر أن يقوم بكتابة قيمتها ، فقد يكتب مثلا كود يكمل به الquery التي وضعتها ويضع أمر sql أخر فيقوم بعمل بعض الأشياء السيئة ،

مثل حدف الـtables الموجودة بقاعدة البيانات ، او إظهار بيانات الادمن بعد إيجاد إسم الـtable الخاص به ، وغيرها من الأشياء التي تمنحها لنا لغة الـsql ، لنضع مثالا إدا ، لكيف يكون الكود الغير المحمي من هده التغرة ، 

أولا أضع ملفين  index و database كليهما بلغة php : 


كالتالي ، وبعدها نعمل إتصال بقاعدة البيانات في ملف database :


ننشئ قاعدة البيانات التي وضعنا :


نضع جدول users لنستعمله في الدرس :


بعدها نضع الـcolumns :


ندخل ، تمام :


نفتح الرابط على السيرفر المحلي ، لنرى هل من مشاكل في الإتصال :


لا شيئ يظهر ، بمعنى أنه كل شيئ تمام ، جميل ، نمر الأن لوضع html markup ،


نضع form خاص بالبحت عن username :


النتيجة في المتصفح :


نعمل validation تخص البحت ونعمل query لنبحت عن الإسم الدي سيدخله الزائر :


لنجرب عمل الأمر :


بعد الضغط على submit : 


تمام كما برمجنا الأمر ، لأننا لسنا نحتفظ بأي معلومات حول username بإسم hisham ، 

ندخل record جديد يدويا ، 


بعد إعادة تحميل الصفحة في phpsec ، 


كما ترون يقول الأن وجده بعدما أضفناه لقاعدة البيانات ، الأن لنعطي شرح بسيط لخطورة الأمر ، نضع table جديد بإسم admins ، ونضع فيه الأعمدة التالية ، فقط للتجريب :


نمر 

جميل ، تمام ، نرجع الأن لسكربتنا ونضع كود sql injection ونستغل التغرة :


كما ترون وضعت كود إستغلال sql ، ليقوم بمحو table admins :


من الوهلة الأولى يبدو كما لو أنه لم يتم العمل ، الأن ندهب إلى phpmyadmin ونتأكد :


كما ترون يوجد فقط table users ، وحدف الـadmins ، تصورو خطورة الأمر لو كان في المنتدى وحدف table الخاص بالمواضيع وحدف كل المواضيع الموجودة بالمنتدى .. ،

للحماية من هده التغرة نقوم بعمل التالي :


نبدل الكود ونستعمل prepare بدل ما إستعملناه المرة الأولى ، ونضع القيمة التي يعطيها لنا الزائر في داخل array الموجودة ب دالة execute ، أما بخصوص الـkey الخاص بالarray فنستعمل الإسم الدي وضعناه في prepare ،

والدي كان :username ، لدلك وضعناه ك مفتاح لل array كدلك .

الأن لنعيد وضع الtable الخاص ب admins ونجرب إستغلال التغرة هل تعمل ام لا : 


نضغط go :


تمام :


 

نرجع لصفحة السكربت وندخل الكود الخاص بالإستغلال :


كما ترون وضعناه لنضغط submit : 


كالمرة الأولى ، فهل إشتغل الكود ، لنتأكد من phpmyadmin :


كما ترون إخواني ، الـtable مازال موجودا ولم يحدف مع أننا أدخلنا نفس الكود ،

من هنا إخواني الكرام نفهم أن بعد ما غيرناه في الكود حفظ لنا الـform من تلك التغرة ،

وهده التغرة جد خطيرة ، ولكن مع خطورتها فمن السهل الحماية منها ، فقط يجب عدم السهو ، والتركيز الكامل خصوصا في أمر المدخلات الحرة ،

توجد العديد من الطرق للحماية من sql injection ولكن تبقى هده هي أفضلهم وأقواهم وأسهلهم ، لدلك إستعملوها بشكل مكثف خخ ،

إلى هنا إخواني الكرام ينتهي درسي الأول ، نلتقي في الدرس الثاني بإدن الله ،

تعليقات

  • فيسبوك
  • جوجل بلاس
جميع الحقوق محفوظة لـ MedZr

تصميم و تكويد