السلام عليكم
في الاول اشكر الاخ ولد العودة على تصميم وبرمجة البرنامج وجزاه الله خير على حسن نيته و نشرة السكريب بالمجان .
خلال تصفحي للسكريب وجدنا ان هناك ثغرات أمنية فية خاصة مع تفعيل html عند ارسال فتوى
وبعض الثغرات الاخرى مثل حقن قواعد البيانات, SQL Injection .
الموضوع ليس فقط بالنسبة لسكريب الفتاوي بل العديد من السكريبات العربية ومع الاسف بسبب
عدم المعرفة لبعض هذه الامور اثناء البرمجة , ونعلم التحديثات التي تحصل من قبل مبرمجين
اكادميين مثل برامج vBulletin والنيوك وغيرها .
حلول :: يجب الحذر عند الرد على اي سؤال للفتاوي خاصة التي تحتوي على اكواد غريبة .
:: تعطيل كود html عند الارسال للقاعدة .
مثال
كود PHP:
<?
htmlspecialchars($ff);
?>
حيث يكون المتغير $ffهو المتغير الذي نريد إلغاء منه الـ html
وطبعا يمكننا اعطاء هذا المتغير اي قيمة نريد
او ارجاع اي قيمة له من قواعد البيانات
SQL Injection ؟؟
او بالترجمة للكلمة هو حقن الداتابيز عن طريق اوامر SQL من المعروف ان اختراق المواقع يتم عن طريق فحص البورتات المفتوحة علىالسيرفر و من النادر ان تجد بورت مفتوح غير 80 لذلك في هذا المقال سوف اقوم ببعض الشرح عن طريقة فحص موقعك او برنامج بحيث تمنع اختراق الموقع عن طريق هذا البورت حيث ان هذا البورت مخصص للتصفح
SQL Injection يعمل مع اي موقع يستخدم لغة برمجة للسيرفر مع قاعدة البينات مثل ASP, JSP, PHP, CGI, ...الخ
ماهو SQL Injection؟
هوه خدعه يقوم بها المتصفح لحقن الموقع باوامر SQL بحيث يقوم بالحصول على معلومات الموقع او حتى تستطيع ان تقوم بحذف كامل قاعدة البيانات من موقع معن في حال ان الموقع غير محصن من هذه الناحية
البداية و عن ماذا نبحث ؟
اولا نقوم بالبحث في الموقع عن مكان نستطيع فيه ان نرسل بيانات للموقع (لوحة تحكم - تسجيل دخول - فورم للبحث....الخ) او حتى صفحات تفاعلية تستقبل متغيرات من الرابط كمثال
كود PHP:
http://localhost/Categories.asp?categoryId=502
لنتخيل ان هذه الصفحة تقوم بعرض بعض المنتجات ضمن الجدول رقم 502 مما يعني ان المبرممج قد اختار امر SQL الخاص به بهذا الشكل
كود PHP:
$SQL="Select * from products where CAT=502"
اذا قمنا بتعديل المتغير علىالرابط بحيث يكون بهذا الشكل
كود PHP:
http://localhost/Categories.asp?categoryId=502 or 1=1
سيصبح امر SQL على هذا الشكل
كود PHP:
$SQL="Select * from products where CAT=502 or 1=1"
و بهذا الشكل نكون قدد حصلنا على امنتجات جميعا بغض النظر عن الجدول التابعه لههذه المنتجات
و تستطيع بهذا المثال البسيط ان تتخيل مقدار المعلومات اللتي تستطيع الوصول اليها عن طريق ادخال بعض الاوامر في الحقول التي ترسل الى اوامر SQL بالموقع
فإذا كنت مبرمج عليك ان تفحص برامجك من هذه الناحية فهذه ثغرة امنية فقط المبرمج من يستطيع حلها و للأسف لاحظت هذه الثغرة موجودة في مواقع عربية كثيرة . ( منقول للفائدة ) .
شيء أخر :
عن استقبال قيم المتغيرات استخدم المصفوفات
كود PHP:
$id = $_GET['id'];
واذا تستقبلها من نموذج بطريقة post فاستقبلها هكذا
كود PHP:
$name = $_POST['name'];
$email = $_POST['email'];
استخدم الدوال لتنقية النصوص وخصوصا قبل ادخالها الى قاعدة البيانات
مثلا
intval ترجع لك قيمة عددية
trim تحذف الفراغ من اول النص واخره وهذا يساعد على الحفاظ على حجم اكبر فيقواعد البيانات
addslashes تقوم بوضع / السلاش في النصوص قبل "
هذا عن الاضافة في قواعد البيانات وعند طباعة النص الذي استخدمت له addslashes
استخدم stripshashes لازالة السلاش عند طباعة النصوص من اجل الشكل والمظهر
htmlspecialchars او stripslashes لازالة اكواد php و html من النصوص
وهذا مثال على كل واحدة
كود PHP:
$id = intval($_GET['id']);
$name = trim($_POST['name']);
$name = addslashes($_POST['name']);
echo stripshashes ($row['name']);
$page = htmlspecialchars($_GET['page']);
$page = htmlspecialchars($_POST['page']);
$page = stripslashes($_GET['page']);
$page = stripslashes($_POST['page']);
ملاحظة mysql_escape_string تعمل نفس عمل addslashes وايضا هناك دالة تعمل نفس العمل mysql_real_escape_string
ملاحظة 2 كل تنقية النصوص تكون قبل ادخالها الى قاعدة البيانات حتى تضمن امان اكثر
مثال
كود PHP:
$name = addslashes($_GET['name']);
$sql = mysql_query("insert into table (name) values('$name')");
اقتباس من مشاركة الاخ إنترنت بلس عند استخدام الأرقام التي ترسل بواسطة GET
كود PHP:
$page = (int) $_GET['page'];
النصوص ::
كود PHP:
$page = strip_tags($_GET['page']);
الموضوع
حمل برنامج الفتاوى الإسلامي وعناوين المراكز والمفتين
تم اقتباس العديد من المقالات الخاصة في النواحي الامنية في سوالف وغيرها من المنتديات .
اخوكم بدر العنزي .