السلام عليكم ورحمة الله ..
قبل البدء في الموضوع ثغرات حقن قواعد البيانات أصبحت خطيرة لأبعد الحدود ولا يستهان بها فأبسطها تكون بالوصول إلى البيانات وتعديلها أو حتى حذفها وأخطرها لا يمكن حصرها لتنوعها وقوتها
وضعت هذا الموضوع بعد أن رأيت بأن الكثير من السكريبتات العربية vbzoom,Cart shop,etc.. هي ضحية لثغرات حقن SQL وهذا السبب الذي جعل الكثيرين يبتعدوا عن استخدامها والإتجاه نحو السكريبتات الأجنبية والمعربة.
<?php
$_POST[‘username’] = ‘ahmed’;
$_POST[‘password’] = “‘ OR ”='”;// البحث في قاعدة البيانات عن عضوية مشابهة لمدخلات المستخدم
$query = “SELECT * FROM users WHERE user='”.$_POST[‘username’].”‘ AND password='”.$_POST[‘password’].”‘”;
mysql_query($query);// لم نقم بفحص المتغير $_POST[‘password’] الذي أدخله المستخدم, قد يحتوي على أي أوامر يريدها المستخدم! وفي مثالنا هذا قام المستخدم بتخطي كلمة المرور:
?>
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''
الموضوع صعب مش كده؟
الحماية من ثغرات حقن SQL في PHP ، البعض بل الكثيرين وانا كنت أحدهم يستخدموا عمليات البحث في البيانات المدخلة وفحصها من احتوائها على رموز معينة يتم تحديدها مسبقاً وتنفيذ الأوامر في حال لم يوجد أي من هذه الرموز هذه الطريقة بدائية وقد تفقدنا الكثير من مميزات برامجنا… الأن سأشرح طريقة رسمية ومضمونة وبسيطة جداً تحقق نسبة أمان عالية في تفادي عمليات الحقن وأيضاً يمكننا إدخال أي نوع من الرموز بدون أية مشاكل!! وهي باستخدام إحدى دوال PHP المخصصة لذلك وهي الدالة
Mysql_real_escape_string()
حيث يجب تمرير كل مدخلات المستخدم من خلال هذه الدالة حيث تعمل على فلترة وتحويل الرموز الخطيرة بحيث لا يكون لها أي تأثير في الاستعلام ويتم التعامل معها كنص عادي
مثالنا السابق مع عمل فلترة عن طريق الدالة للمدخلات:
<?php
$_POST[‘username’] = ‘ahmed’;
$_POST[‘password’] = “‘ OR ”='”;// البحث في قاعدة البيانات عن عضوية مشابهة لمدخلات المستخدم
$query = “SELECT * FROM users WHERE user='”. mysql_real_escape_string($_POST[‘username’]).”‘ AND password='”. mysql_real_escape_string($_POST[‘password’]).”‘”;
mysql_query($query);// لاحظ اننا قمنا بعمل فلتر المتغيرات عن طريق الدالة وهنا يتم ابطال مفعول الحقن
?>
وهكذا انتهي الدرس..كشف الثغرات..الاستغلال..الحماية من الثغرة
Ahmed El Sheikh