1. الرئيسية
  2. الإحصائيات
  3. البحث
  4. جديد الدروس
  5. أخبر صديقك
  6. اتصل بنا

مكتبة الدروس دروس فوتوشوب برمجة شبكات تصميم هندسة عربي دورات  » S e c u r i t y » أساسيات البرمجة الآمنة في لغة php

 أساسيات البرمجة الآمنة في لغة php  أضيف في: 2-10-1432هـ
أساسيات البرمجة الآمنة في لغة php


البرمجة الآمنهــ




في هذا المقال تم استعراض أهم الأساسيات والأمور التي يجب مراعاتها أثناء برمجة أي تطبيق بلغة PHP , وأهم هذه الأساسيات هو تأمين المدخل القادم من مستخدم التطبيق حيث أن الحديث في هذا المجال يطول وذلك بسبب خطورة أي مدخل من قبل المستخدم, ولكن أهم ما تطرقت إليه هو عملية التحقق من صحة المدخل , مثل نوعية المدخل, لأن بعض المخترقين يتعمدون إدخال قيمة خاطئة من أجل تعطيل التطبيق أو من أجل إدراج قيمة خاطئة في قاعدة البيانات أو لحذف شيء منها , وقد ذكرتُ بعضا من الأمثلة التي تعمل على التحقق والتأكد من المدخل , وأيضا من الأمور التي تحقق تأمين المدخل الحماية من الثغرات التي يكون سببها أخطاء برمجية في برامج معينة مثل خادم الموقع ,فيأتي من يستغل هذه الثغرات ويكسر حماية الموقع أثناء الإدخال , ومن هذه الثغرات التي تحدثت عنها حقن SQL, البرمجة المتقاطعة للموقع و ثغرة استدعاء الملفات ,وتم ذكر الحلول المقابلة لمواجهة كل نوع من هذه الثغرات , والأمر الثاني هو رسائل الخطأ التي تظهر للمستخدم متى ما كان هناك خطأ ما وقت التشغيل , فذكرت أهمية إخفائها عن المستخدم وطريقة إخفائها, لأنها قد تكشف شيئا من خصوصية التطبيق,وفي المقابل كيفية تخزين هذه الأخطاء في ملف آمن بعيدا عن المستخدم من أجل الرجوع لها من قبل صاحب التطبيق لإيجاد حلول مناسبة لها.


المحتويات

<ul class="knol-toc-list" id="knol-toc-list"><li class="knol-toc-item-h2 knol-element-toggle-threshold-2">المقدمة<li class="knol-toc-item-h2 knol-element-toggle-threshold-2">الكلمات المفتاحية<li class="knol-toc-item-h2 knol-element-toggle-threshold-2">1. تأمين المدخل في لغة php والتحكم به<li class="knol-toc-item-h3 knol-element-toggle-threshold-3">1.1 التحقق من صحة المدخل<li class="knol-toc-item-h3 knol-element-toggle-threshold-3">1.2 الحماية من الثغرات أثناء عملية الإدخال<li class="knol-toc-item-h2 knol-element-toggle-threshold-2">2. إخفاء رسائل الخطأ<li class="knol-toc-item-h2 knol-element-toggle-threshold-2">الخلاصة<li class="knol-toc-item-h2 knol-element-toggle-threshold-2">المراجع الأجنبية<li class="knol-toc-item-h2 knol-element-toggle-threshold-2">المراجع العربية</ul>
==========================================

http://coeia.edu.sa/images/stories/pics_articles/to_secure_php_language_main.jpg


المقدمة

لغة php تعتبر واحدة من أهم وأشهر لغات البرمجة لتطبيقات الويب من مواقع الكترونية وغيره, وكذلك من المعروف بأن هذه اللغة سهلة التعلم , فمن خلال الدروس المعروضة على الشبكة العنكبوتية بإمكان أي شخص لديه خلفية حتى وإن كانت بسيطة من إنشاء موقع وبرمجته بهذه اللغة , ولكن للأسف بالرغم من سهولتها إلا أن كثيراً من الأشخاص ولاسيما المبتدئين منهم تجاهلوا أمر كيفية الحماية أثناء البرمجة من المخترقين ونحوه ممن يستغل الثغرات الموجودة في التطبيق , فهذه اللغة معرضة لكثير من المخاطر التي تكسر حمايتها ومازالت هذه المخاطر في ازدياد مع استمرار الوقت , لذلك وُجدت أساسيات ومبادئ من أجل برمجة آمنة بإذن الله ,فمن هذا المنطلق وضعت هذه المقالة من أجل بيان أساسيات البرمجة الآمنة لهذه اللغة ,وإن كان المجال في هذا واسعا ولكن سأتطرق لأهم الأمور التي ينبغي مراعاتها لكل من لديه أو سينشئ مشروعا تطبيقيا بلغة php.




الكلمات المفتاحية

الثغرات , الاستعلام ,المهاجم , استدعاء الملفات , رسائل الخطأ.





1. تأمين المدخل في لغة php والتحكم به




1.1 التحقق من صحة المدخل


التحقق من تلك المدخلات خطوة ضرورية للحماية من المهاجمين وذلك من خلال التأكد من أن أي مستخدم يستطيع أن يدخل بياناته وفقا للنوع المحدد من قبل صاحب التطبيق فقط , ولا يسمح له بإدخال أي نوع آخر قد يشكل خطرا على التطبيق , حيث أن أشهر أنواع المهاجمين من يستغلون التطبيقات التي تخلو من عمليات التحقق ,فيتعمدون بإدخال بيانات خاطئة مثل : نوع خاطئ , حجم غير صحيح , بيانات تحتوي على رموز خاصة مثل:((escape أو بيانات بالصيغة الثنائية, مع العلم بأن إدخال البيانات بشكلٍ خاطئ قد يؤدي إلى تعطل التطبيق , كتابة بيانات غير صحيحة في قاعدة البيانات أو حذف بيانات منها , وسيكون المعنى أكثر وضوحا بذكر بعض الأمثلة الشائعة:
مثال-1- : لو كان أحد المدخلات لتطبيق ما هو إدخال تاريخ الميلاد , فلابد أن نتحقق من أن اليوم يأخذ القيمة الرقمية (1-30) , والشهر كذلك رقما مابين (1-12) , والسنة لابد أن تكون من أربع خانات وهكذا ,انظر صورة (1) , وفي حالة المخالفة لذلك يتم عرض رسالة خطأ مناسبة للمستخدم.انظر صورة(2). [3],[4]


http://coeia.edu.sa/images/stories/pics_articles/php_code1.jpg

صورة (1): مثال يوضح كيفية تأمين المدخل عن طريق التحقق من نوع البيانات المدخلة.


http://coeia.edu.sa/images/stories/pics_articles/warning_message.jpg

صورة (2): رسالة خطأ للمستخدم عند مخالفة المطلوب أثناء الإدخال.




مثال -2- : في حالة أن التطبيق كان به محركاً للبحث ,وأراد المستخدم البحث عن كلمة معينة , أو عند تسجيل الدخول , وأدخل المستخدم كلمة البحث لكنه وضع مسافة من لوحة المفاتيح , سيؤدي ذلك إلى عرض جميع محتويات المكان الذي يبحث فيه , وبالتالي سيشكل هذا ضغطا على خادم التطبيق ومن ثم قد يؤدي إلى تعطله , فالحل هو عن طريق عملية التحقق من أن المدخل لا يحتوي على مسافات (فراغات) وذلك باستخدام الدالة trim() , انظر صورة(3). [10]



http://coeia.edu.sa/images/stories/pics_articles/php_code2.jpg

صورة (3): مثال للتحقق من عدم وجود فراغات أثناء الإدخال.





1.2 الحماية من الثغرات أثناء عملية الإدخال



"الثغرات هي أخطاء برمجية في برامج معينة مثل خادم الموقع وأي برامج أخرى ، لأنها من صنع البشر لذا
يجب أن تحتوي على أخطاء أو ( ثغرات) وهناك أنواع أخرى عبارة عن برامج مصممة ومكتوبة بلغات معينة
لاستغلال ثغرة معينة." [7]



1.2.1 الحماية من ثغرة البرمجة المتقاطعة للموقع



البرمجة المتقاطعة للموقع (Cross Site Scripting) ,اختصارها ((XSS, وفي بعض الأحيان يرمز لها بالرمزCSS) ) ,هذا النوع من الهجوم من أكثر الهجوم انتشارا في عالم الاختراق حيث يشكل بنسبة 25% من الهجوم, وهدفه هو السكريبتات ("مجموعة من الأوامر البرمجية ينتج عنها نظام إدارة متكامل حسب نوع الموقع والتوجه المطلوب") [11] المنفذة من جهة المستخدم, فهو يستغل البرمجة الغير آمنه ,وذلك بإرسال محتوى غير مرغوب فيه لمستخدم الموقع أو إلى المستخدم النهائي ومن ثم جمع معلومات عن الضحية , ويكون ذلك عن طريق استخدام أداة تعين ذلك المهاجم على ذلك مثل: السكريبتات المستخدمة خلال النماذج من جهة المستخدم (java script- Html –flash –Active X) وغيرها من الأدوات التي تضاف على التطبيق من أجل تصميم الواجهات وإضافة مزيد من الدينامكية للموقع, فيقوم المهاجم بحقن أو إضافة أمر html)) إلى أحد السكريبتات السابقة إذا كانت مصابة ,أي بها أخطاء برمجية من الناحية الأمنية ,ومن ثم يحصل الاختراق وسرقة المعلومات للتطبيق , وأحيانا من يشاهده أيضا , وهذه الثغرة منها نوعين:

1- ثغرة داخليه: يتم حقن الأمر داخل التطبيق نفسه مثل إدراج الأمر إلى صندوق الإهدائات للموقع.
2- ثغرة خارجية: يتم حقن الأمر من خارج التطبيق مثل عند إدخال رابط الموقع نفسه.
أما بالنسبة لحل هذا النوع من الهجوم ,فهناك عدة حلول منها:

1- متى ما اكتشف المبرمج وجود هذه النوعية من الثغرات في أوامر تطبيقه فإنه يقوم مباشرة بالتعديل,وذلك بمنع أوامر (HTML) من التنفيذ , باستخدام الوظيفة (Remove XSS()) , حيث تقوم هذه الوظيفة بعمل فلتره , أي حذف كل ثغرة من نوع ((XSS من أوامر التطبيق , ويتم وضع هذه الوظيفة في ملف من نوع ((PHP وتسميته بـ (XSS.PHP) ,ويقوم صاحب التطبيق بوضع هذا الملف في المجلد الذي يحوي ملف السكريبت المصاب , ثم وضع أمر واحد في أعلى الملف المصاب, وظيفته استدعاء الملف السابق وهو ( (include (xss.php); . [9],[10],[12]

2- كذلك من الحلول عمل فلتره وتصفية بالتحقق من صحة المدخل والبيانات التي تأتي من قبل المستخدم كما ذكرت في بداية هذا المقال.


3- استخدام وظائف خارجية مثل: (htmlentities(), strip_tags(),utf8_decode() ) والتي تعتبر فعالة وناجحة ,وتتميز بالسرعة وقلة الأخطاء التي تستغل ضد التطبيق , انظر صورة(4). [1]


http://coeia.edu.sa/images/stories/pics_articles/php_code3.jpg

صورة (4): أحد حلول التخلص من ثغرات XSS الفعالة.









1.2.2 الحماية من حقن SQL



هذا النوع من الثغرات أشد خطورة من ثغرات ((XSS ,ويسمى بحق الــ(SQL) , وسبب التسمية هو أنه يعتمد المهاجم على عملية حقن استفسار داخل الاستفسار الأساسي المطلوب ,بالتالي يتغير مجرى ذلك الاستفسار الأساسي ومن ثم يتم الإطلاع على معلومات وبيانات سريه وخاصة ليس له الحق بالإطلاع عليها مثل الرقم السري لصاحب التطبيق, أما بالنسبة لكيفية الحماية من هذا النوع من الهجوم فهناك بعضا من الحلول:
1- عملية تصفية للبيانات المدخلة من خلال الاستعلام , وذلك باستخدام الوظيفة ( filter_sql() ), انظر صورة(5).[9]


http://coeia.edu.sa/images/stories/pics_articles/php_code4.jpg

صورة (5): تصفية البيانات المدخلة لقاعدة البيانات باستخدام الوظيفة filter_sql().


2- في بعض الأحيان تكون البيانات المدخلة صحيحة لكنها تتضارب وتتعارض مع تنسيق جمل الاستعلام نفسها,فهذه مشكلة , ففي هذه الحالة من الأفضل استخدام الوظيفة mysql_escape_string() ) ) عند الاتصال بالخادم , انظر صورة(6).[3]



http://coeia.edu.sa/images/stories/pics_articles/php_code5.jpg

صورة (6): حل مشكلة التضارب مع تنسيق جمل الاستعلام بالرغم من أن البيانات المدخلة صحيحة.



1.2.3 الحماية من ثغرات استدعاء الملفات



هذا النوع من الثغرات أخطر من XSS) ) ,وفي بعض الأحيان يكون أخطر من ثغرات SQL)) ,وذلك لأن خطرها ليس على المستخدم إنما على خادم التطبيق , ويكون ذلك الخطر عن طريق تغيير مسار أحد الملفات الأساسية المستدعاة إلى مسار ملفات خبيثة بأحد الدوال المشهورة مثل include)() ), انظر صورة (7), ومن ثم يكون للمخترق تحكماً شبه كامل بالتطبيق ,وأحيانا إذا كان ذلك المخترق من المحترفين فإنه يسيطر على الخادم بشكل كلي. [8]

هناك نوعان من استدعاء الملفات وهي:
1- تسمح باستدعاء ملفات من خارج الخادم.
2- تسمح باستدعاء ملفات من داخل الخادم كأن تكون محفوظة على شكل صورة.
الحل بكل بساطة هو القيام بإغلاق السجلات العامة الموجود في ملف ((php.ini ,انظر صورة(8) , لكن للأسف بما أن كثير من أصحاب التطبيقات قد اعتمدوا على الاستضافة المشتركة لتطبيقاتهم , لذلك لا يستطيعون التحكم بإغلاق تلك السجلات , فالحل هو أخذ إذن من المضيف بإعطاء القدرة على استخدام ملف htaccess)) ,ومن ثم وضع عملية الإغلاق داخل هذا الملف.[5]


http://coeia.edu.sa/images/stories/pics_articles/php_code6.jpg

صورة (7): الدوال المشهورة لاستدعاء الملفات والتي قد تشكل خطرا على أمن الموقع إذا استخدمت بشكل خاطئ.


http://coeia.edu.sa/images/stories/pics_articles/php_code7.jpg

صورة (8): إغلاق register_globals من أجل الحماية من ثغرات استدعاء الملفات.


2. إخفاء رسائل الخطأ

المقصود برسائل الخطأ , هي التي تظهر للمستخدم عندما يكون هناك خطأ ما وقت التشغيل , مثل : استخدام غير صحيح لوظيفة معينة , أو خطأ إملائي لأحد المتغيرات وغيرها من الأخطاء , انظر صورة (9) , فرسائل الخطأ من الأمور المهمة, فهي تخبرنا ما هو الخطأ وأين يوجد هذا الخطأ ,,لكن هذه الرسائل قد تكون سببا لمعرفة المستخدمين وخاصة المهاجمين منهم لمعلومات مهمة عن النظام وبالتالي استغلال نقاط ضعف هذا التطبيق, مثلٍ:عرض اسم ومسار ملف السكريبت الذي به الخطأ, اسم الوظيفة التي كان بها الخطأ و رقم السطر الذي احتوى الخطأ ,فيتعمد المهاجم للوقوع في الأخطاء من أجل الحصول على تلك المعلومات التي تفيده في كسر حماية هذا التطبيق , فلذلك لابد من إخفاء كل رسائل الخطأ عن المستخدمين للتطبيق , ويكون ذلك الإخفاء عن طريق إيقاف التوجيهات الخاصة بعرض الأخطاء التي تحدث وقت التشغيل فقط, انظر صورة (10)
لكن في المقابل عند حصول أي خطأ , فالمبرمج أو صاحب التطبيق مازال بحاجة إلى معرفة هذا الخطأ لمعالجته وحله , فلذلك لابد من التأكد من تسجيل كل الأخطاء في ملفات محمية , وهذا يتم عن طريق استخدام موجهات معينه لتسجيل الأخطاء بشكل دائم ,انظر صورة(11).
يوجد أربعة موجهات مسئولة عن التحكم بعمليه عرض الأخطاء وتسجيلها, ينبغي إعدادها بالشكل المطلوب, انظر جدول(1). [2],[3],[6]



http://coeia.edu.sa/images/stories/pics_articles/warning_message2.jpg

صورة (9): مثال لرسالة خطأ تظهر للمستخدم وقت التشغيل.


http://coeia.edu.sa/images/stories/pics_articles/php_code8.jpg

صورة (10): إيقاف عرض الأخطاء عن المستخدم وقت التشغيل.



http://coeia.edu.sa/images/stories/pics_articles/php_code9.jpg


صورة (11): تمكين تسجيل الأخطاء في ملفات محمية باستمرار.


جدول (1): الموجهات المسئولة عن عرض الأخطاء وتسجيلها ,وتوضيح قيمها المطلوبة.

http://coeia.edu.sa/images/stories/pics_articles/table_of_warning.jpg






الخلاصة

في هذا المقال تحدثت عن بعض الأساسيات والأمور المهمة التي يجب مراعاتها أثناء برمجة أي تطبيق بلغة php من أجل الحصول على بيئة آمنه من المخترقين وغيرهم ممن ليس لهم الصلاحية للوصول لبعض البيانات والمعلومات الخاصة بالتطبيق ,ومن أهم هذه الأساسيات حماية وتأمين المدخل الذي يكون من قبل مستخدمي التطبيق ,وكذلك ما يخص رسائل الخطأ وأثرها على كشف شيء من خصوصية التطبيق , وأحب أن أنوه أنه في حالة افتراض صاحب التطبيق بأن تطبيقه لن يواجه أي نوع من الهجوم أو المخترقين أو المشاكل , ومن ثم واجه أي نوع منها فإن ذلك سيكلفه الكثير والكثير, ومن جهة أخرى متى ما اهتم صاحب التطبيق بحماية تطبيقه وأخذ الاستعدادات اللازمة أثناء البرمجة وبعدها لمواجهة أي نوع من الهجوم فإن ذلك سيجعل التطبيق أكثر أمانا.






المراجع الأجنبية




[1] Bulb, Brain,(2005) , PHP Security Guide, [Available online]. Retrieved Des 22, 2009 from http://phpsec.org/projects/guide/1.html
[2] Egeberg, Daniel ,(2008), PHP Security, on link http://www.phpfreaks.com/tutorial/php-security
[3] Shreve, Justin, (2008), 5 Helpful Tips for Creating Secure PHP Applications, [Available online]. Retrieved Des 22, 2009 from http://net.tutsplus.com/tutorials/php/5-helpful-tips-for-creating-secure-php-applications/
[4] Snyder, C. & Southwell , M. ,(2005).Pro PHP Security. Apress.
[5] Wade, Matt, (2006), The #1 Security Flaw in PHP Applications, [Available online]. Retrieved Des 22, 2009 from http://ablog.apress.com/?p=1152
[6] Waterson, Kevin,(2008), PHP Security, [Available online]. Retrieved Des 22, 2009 from http://www.phpro.org/tutorials/PHP-Security.html



المراجع العربية


[7]اختراق المواقع (2) , (1427هـ), تم استرجاعه في 5/1/1431هــ على الرابط http://www.geek4arab.com/less/lesson-234-1.html
[8] بصه, إبراهيم.(2006) , البرمجة الآمنة في لغة PHP مع File Inclusion. تم استرجاعه في 5/1/1431هــ على الرابط http://www.almashroo.com/23/27/
[9] جمال,هاني , (2004) , أخطاء المبرمجين الأمنية فى PHP , تم استرجاعه في 5/1/1431هــ على الرابط http://www.zajilnet.com/forum/index.php?showtopic=11213
[10] حماية برمجياتك ,(2008), تم استرجاعه في 5/1/1431هــ على الرابط http://forum.montadaphp.net/t1733/
[11] ما هو السكربت ( Script ), (2008) , تم استرجاعه في 5/1/1431هــ على الرابط http://www.link4iraq.net/showthread-t_9.html
[12] ما هي ثغرات الـ Cross Site Scripting أو XSS, (2008) , تم استرجاعه في 5/1/1431هــ على الرابط http://www.itgroup-sy.net/forum/index.php?action=printpage;topic=410.0



* هذه المقالة كانت من بين أفضل ٥٠ مقالة ..التابعة لمركز أمن المعلومات ..اندراجا تحت مادة أمن المعلومات في جامعة الملك سعود.


الكاتب: أفنان الحصيني انقر هنا لمراسلة أفنان الحصيني أنقر هنا للإنتقال إلى موقع أفنان الحصيني إضافة للمفضلة إضافة لمفضلة Google إضافة لمفضلة Delicious إضافة لمفضلة Digg إضافة لمفضلة Facebook
خيارات الدرس : ارسل الدرس لصديق ارسل الدرس لصديق  طباعة الدرس طباعة الدرس  حفظ الدرس كملف PDF حفظ الدرس كملف PDF

التعليقات
لا يـوجـد تـعليـقات على هـذا الـدرس


POWERED BY: SaphpLesson 4.0