المعالجة المنظمة لأمن تطبيقات الويب Web Application بإستخدام لغات البرمجة JAVA و PHP و ASP

عام 0 geek4arab
Spread the love

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

ويعتقد بعض الاشخاص أنه بمجرد نشر تطبيق معين على موقعك تكون قد فتحت منفذ جديد للدخول وإختراق
الموقع؟؟!!
بالتأكيد هذا الرئي الغريب لم يأتي من فراغ إذ يرون هؤلاء الاشخاص ان اكثر عمليات الاختراق والدخول على
المواقع هذه الايام سببها خطأ برمجي في تطبيقات الويب

هل تعلم أن اخطر الثغرات مثل : Command Execution و Remote File Inclusion و SQL Injection
في الأساس سببها هفوة لاحظ هفوة من المبرمج ولكن إكتشافها من قبل مخترق الموقع سببه خطأ في التطبيق

سنخرج من هذه الالغاز بأمثله:
لو افترضنا وجود تطبيق بإسم test.php في الموقع وهو عبارة عن تطبيق
للتحقق من اسم المستخدم وكلمة المرور بهذه الطريقة
http://www.example.com/test.asp?user=Ali&password=123456

وبداخل كود التطبيق فإن طريقة معالجة الطلب بهذا الشكل
Select * from Users where USR =$user and PSW=$password

مئة بالمئة الكود صحيح إذا نفذته بشكل عادي بمعنى ادخلت اسم صحيح وكلمه مرور صحيحه
اما الشخص مخترق الموقع لن ينفذه بالشكل الطبيعي سيحاول تنفيذ امر مثلاً لإكتشاف ثغرة SQL
لنفرض انه طلب
http://www.example.com/test.asp?user=’ OR 1=1&password=123456

في هذه الحال سيحدث خطأ ! وهذا ما قصدنا منه غفوة من المبرمج لأنه في الاساس ليس خطأ برمجي اذا استخدم
بالشكل الصحيح وهذه الغفوات بالآلاف في المواقع العربية
وبرنامجناAnti-WebInjection المجاني يستطيع اكتشافها
http://www.jaascois.com/software/AntiWebInjection


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

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

موضوعنا اليوم هو المعالجه المنظمة ودورها يأتي بعد التشييك الكامل على المدخلات
ماهي المعالجة المنظمة:

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

ولكن هذه الايام ظهرت مؤخراً في لغات برمجة الويب بداية بلغة الجافا وقريب جدا ظهر في النسخ الاخيرة من php و asp

نبدأ بلغة الجافا:
لغة الجافا مهتمه جدا بمعالجة الاخطاء إذ تجبرك احيانا اضافه بلوك المعالجة المنظمة والتدقيق إجباري , ولهذا تجد
لغه الجافا منتشرة في التطبيقات الامنيه.

الآن كيف يتم إضافه بلوك المعالجة المنظمة , بإختصار إستخدم علامتي try و catch
كالتالي:

try{

// إضافة الكود هنا

}catch(java.lang.Exception e){

// ينفذ هذا البلوك إذا حدث خطأ في التطبيق
out.println(“error”);
}

كيف يعمل البلوك: سيبدأ بتنفيذ الاكواد في قوس try
إذا حدث أي خطأ سينفذ البلوك catch وسيظهر المسج error بدل ان يظهر للمستخدم كود الخطأ في الموقع
بهذه الطريقة ستنسى خطأ رقم 500 وهو الذي يعرضة المتصفح عند حدوث اي استثناء في التطبيق
وهذا الخطأ هو الخيط الاساسي لأي ثغره أمنية في التطبيق

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

fileDat = new File(“https://www.jaascois.com/file.html”);
InputBuf = new BufferedReader(new FileReader(fileDat));
while((str=InputBuf.readLine())!=null){
// قرائة الملف
}
InputBuf.close();

في هذا الكود البسيط تحدث ثغرات وإحتمالات كثيرة
لاحظ كيف سنحل المسألة

try{

fileDat = new File(“https://www.jaascois.com/file.html”);
InputBuf = new BufferedReader(new FileReader(fileDat));
while((str=InputBuf.readLine())!=null){
// قرائة الملف
}
InputBuf.close();

}catch(IOException e){

// ينفذ هذا البلوك إذا حدث خطأ في التطبيق
out.println(“error”);
}

إذا حدث أي شيء في التطبيق سيظهر للمستخدم كلمة error فقط
في ملاحظة في الكود , تلاحظ في catch استخدمنا الاستثناء IOException فقط
وهو خاص بأخطاء الملفات فقط لأنك تلاحظ الكود بداخل البلوك يحتوي على دوال ملفات
وهذه الطريقه تسرع المعالجه وهو تخصيص الاحتمالات في مجال معين
وتستطيع إضافة اكثر من بلوك catch لمعالجة اكثر من نوع وانواع الاحتمالات كثيرة في لغة
الجافا وهي
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Exception.html

الكود النهائي بعد التدقيق والمراجعه واضافه البلوك

try{

fileDat = new File(“https://www.jaascois.com/file.html”);
if( fileDat.isFile()==false)
return false;

InputBuf = new BufferedReader(new FileReader(fileDat));
while((str=InputBuf.readLine())!=null){
// قرائة الملف
}
InputBuf.close();
}catch (IOException e) {
out.println(“IOException”);
}

هذا الكود نهائي وآمن 100%


لغة برمجة الويب ASP

بنفس المفهوم السابق وكل الخطوات مأخوذة في الاساس من لغة السي
مثال للبلوك

Try

‘ اضف الكود هنا

Catch ex as Exception
‘ اذا حدث اي خطأ اظهر المسج التالي
Response.Write(“error ” )
End Try

مثال لقصه الملف

Dim oFileread As System.IO.StreamReader
Try
‘ بداية كود معالجة ملف ما
oFileread = New System.IO.StreamReader(sFilename)
oFileread.Close()

Catch e As System.IO.FileNotFoundException
‘ اذا حدث اي خطا سينفذ البلوك الحالي
Response.Write(“error”)
End Try

أنواع الاستثنائات في لغة asp
http://www.dotgnu.org/pnetlib-doc/System/Exception.html


ال PHP ومعالجة الأخطاء المنظمة

ملاحظة تم إضافة المعالجة المنظمة للغة ال PHP في الإصدار 5
أي إصدار لمترجم php أقل من الاصدار الخامس لن تعمل المعالجة المنظمة

تستخدم المعالجة المنظمة في لغة php بنفس الطريقة

<?php

try{

// اكتب الكود هنا

} catch (Exception $e) {
// اذا حدث اي خطأ في الكود السابق سينفذ البلوك الحالي
echo “error”;
}

?>

سنأخذ مثال يبين لك فائده هذا البلوك في معالجة خطأ منطقي
لاحظ الكود

<?php
try
{
print 2 / 0;
}
catch (Exception $e)
{
print “error”;
}
?>

الكود السابق يعتبر صحيح من خلال مترجم php ولكن نفذ الكود وهو عباره عن اجراء عمليه قسمه
رقم 2 على 0 واعتقد انه خطأ , ورغم ذلك سيعالج من خلال البلوك


ولا تقتصر أساليب المعالجة المنظمة للأخطاء على لغات البرمجة
فقد تم إضافتها إلى لغات SQL وسكربتات الويب

مثال على إضافه البلوك إلى برمجة SQL خادم SQL Server 2005

BEGIN TRY

— اضف كود الاستعلام هنا

END TRY

BEGIN CATCH

— اذا حدث خطا في الكود سينفذ الكود الحالي
PRINT ‘Error’
END CATCH

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

وبالرغم من ان مفهوم المعالجه المنظمة جديد على برمجة المواقع إلى اننا نتوقع
انه لايمكن بأي طريقه أن يتم إختراق موقع من خلال ثغرات الحقن المشهورة
إذا كان الموقع يستخدم طريقة المعالجة المنظمة اي بلوك try-catch
ولكن لا ننسى ان اساليب الإختراق والحمايه تتطور يومياً

إلى اللقاء

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة