صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 25

الموضوع: أمان الphp الحلــ(1)ــلقة

  1. #1
    عضو نشيط
    تاريخ التسجيل
    Feb 2003
    المشاركات
    76

    أمان الphp الحلــ(1)ــلقة



    هذا الموضوع يهم مبرمجي php بالدرجة الأولى وهي كيف تستطيع
    كتابة كود آمن بإذن الله تعالى ..

    هذا المقال مخصص للمبرمج المتوسط إلى الخبير في لغة php.

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


    في الحلقة الثانية سأتطرق إلى ثغرة خطيرة دائما مايستخدمها
    المخترقون وهي ثغرة SQL Injection.


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


    =============
    ثغرة المتغيرات
    =============
    من الاخطاء الشائعة لدى بعض مبرمجي php هي ثغرة المتغيرات .

    الثغرة: تحدث هذه الثغرة عندما تضع
    شرط معين وعند تحقق الشرط فأنك تغير قيمة متغير ما (flag) . قضية
    الشرط هي لتقريب الموضوع ولكن يمكن أن تحدث على نطاق أوسع
    وفي استخدامات متعددة لا يمكن حصرها.

    المشكلة: من الممكن تمرير قيمة
    المتغير(flag) عبر شريط العنوان url.


    الحل: الانتباه أنه يمكن تمرير قيمة
    عبر شريط العناوين url وطبعا حلها يكون حسب الحالة في حالة الشرط
    على سبيل المثال بإضافة else إلى الشرط لتأكيد أن قيمة المتغير
    (flag) هي الحالة المعاكسة "الحالة الخطأ".


    مثال :
    كود PHP:
    <?
        
    if(login_function($user$pass)) //دالة للتأكد من صحة اسم المستخدم وكلمة المرور
        
    {
            
    $loggedin 1// flag var
        
    }
        
        if(
    $loggedin == 1)
        {
            include(
    "admin.php");
        }
    ?>
    هذا الكود يحتوي على ثغرة كما نلاحظ تمكن في أن المخترق يستطيع
    تمرير القيمة التالية عبر المتصفح . نفرض أن اسم الملف code.php


    http://www.yourname.com/code.php?loggedin=1

    عندما يمرر المخترق هذا السطر عبر العنوان يستطيع الدخول بالرغم من
    أنه لم يدخل اسم المستخدم وكلمة المرور .


    الحل : أما أن نطق مانريد تطبيقه مباشرة داخل الشرط دون استخدام
    flag أما إذا تعذر ذلك فباستخدام else .


    مثال على الحل :
    كود PHP:
    <?
        
    if(login_function($user$pass))
            
    $loggedin 1;
        else
            
    $loggedin 0;

        if(
    $loggedin == 1)
        {
            include(
    "admin.php");
        
    ?>





    =============
    ثغرة إدراج الملفات "include files"
    =============
    ليست من الثغرات الشائعة لكن قد تحدث أحيانا .ولكن مشكلتها أنها
    من الثغرات القاتلة والخطيرة لأنها تمكن المخترق من الوصول إلى أي
    مجلد أو ملف في الموقع.


    المشكلة استقبال صفحة عن طريق
    متغير من شريط العناوين ثم استخدام الدالة include() وارسال متغير
    اسم الصفحة .


    كيف يستطيع المخترق استغلالها: عن طريق تمرير القيمة
    index.php?page=../../../../../../../etc/passwd
    يستطيع الوصول إلى كلمات مرور الموقع !!

    وحتى لو افترضنا عدم استطاعته الوصول إلى مجلد كلمات المرور لانها
    محمية فانه يستطيع تحميل أي ملف إلى السيرفر وبهذه الطريقة يملك
    تحكم كامل على موقعك .لانه يستطيع تشغيل أي ملف يريده !

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


    مثال :

    الكود المشكلة :
    كود PHP:
    <?
        
    //header stuff
        
    $page $_GET['page'];
        include(
    $page);
        
    //footer stuff
    ?>
    الكود بعد التعديل:
    كود PHP:
    <?
        
    //header stuff
        
    $page $_GET['page'];
        if(
    eregi("[a-z0-9\-_\.]+"$page$regs)) //make sure $page is alphanumeric
        
    {
            
    $dir "includes/"//not strictly necessary, can be blank.
            
    $ext ".php"//.php, .html, .txt, whatever
            
    if(file_exists($dir $page $ext))
            {
                include(
    $dir $page $ext); //or readfile if not expecting php code
            
    }
            else
                echo 
    '404 - Not Found'//or something similar
        
    }
        else
            echo 
    'عفواً .. أنت تقوم بعمل غير مشروع لقد تم تسجيل رقم الاي بي الخاص بك ';
        
    //footer stuff
    ?>

    كذلك من الأفضل إذا كان الملف المراد إدراجه ملف نصي استخدام
    الدالة readfile() وليس include() أو require() .

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





    __________________
    وَدّعْتُهـَـا وَدُمُــوْعِيْ مَزْجُ أدْمُعِهَا
    وَقَبـَـلَتْـنِي عَلَىْ خَوْفٍ فَمَــاً لِـفَــمِ
    فَذُقْــتُ مـَـاءَ حَيـَـاةٍ مِنْ مُقَبَلٍــهَا
    لَو صـََـاب تـُـرباً لأحْيـَا سَالِفَ الأُمَمِ
    meylad غير متواجد حالياً


  2. #2
    عضو سوبر نشيط
    تاريخ التسجيل
    Nov 2003
    المشاركات
    821


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





    __________________
    www.abu3amer.com
    أبوعامر غير متواجد حالياً

  3. #3
    عضو فعال
    تاريخ التسجيل
    Jul 2003
    المشاركات
    1,576


    أخي العزيز ..

    تشكر على الدرس ألف مرة ^_^

    وبإنتظار الحلقة الثانية بإذن الله ..

    بخصوص ثغرة include

    أرجو التوضيح أكثر ..

    هل أقوم بعرض الملف أو إستدعائه عن طريق جملة شرطية ؟

    تحياتي ،





    __________________
    SWF Thumbnail - tweet me
    Egyptechno غير متواجد حالياً

  4. #4
    عضو فعال
    تاريخ التسجيل
    Nov 2002
    المشاركات
    1,131


    موضوع جميل جداً..

    اعتقد يستحق التثيت





    __________________
    System
    KaRiM_NET غير متواجد حالياً

  5. #5
    عضو نشيط
    تاريخ التسجيل
    Feb 2003
    المشاركات
    76


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


    الأخ/ Egyptechno :

    لا شكر على واجب أخي العزيز .

    بالنسبة لسؤالك لم استطع فهم المقصود . لكن الثغرة كانت ترتكز على أنه إذا كنت تستخدم دالة include() ويكون اسم الملف عبارة عن متغير قادم من شريط العنوان

    مثال :
    نفرض أن شريط العنوان هو التالي:
    .http://www.yourname.com/index.php?page=help.php

    ولديك ملفين هما : index.php و help.php

    دعنا نستعرض كود index

    كود PHP:
    include("$page"); 
    هنا تظهر المشكلة بأن داخل الدلة استخدمنا متغير مرر عن طريق المتصفح يتطيع المخترق التحكم في قيمته كيفما شاء . طبعا هذا مثال صغير للتوضيح ولكن استخداماتها أكبر وأعم . طبعا الحل بتجنب وضع الصفحات بمتغيرات بشريط العنوان.

    الأخ/ KaRiM_NET :

    أشكر لك مرورك ...





    __________________
    وَدّعْتُهـَـا وَدُمُــوْعِيْ مَزْجُ أدْمُعِهَا
    وَقَبـَـلَتْـنِي عَلَىْ خَوْفٍ فَمَــاً لِـفَــمِ
    فَذُقْــتُ مـَـاءَ حَيـَـاةٍ مِنْ مُقَبَلٍــهَا
    لَو صـََـاب تـُـرباً لأحْيـَا سَالِفَ الأُمَمِ
    meylad غير متواجد حالياً

  6. #6


    السلام عليكم

    مشكور meylad ....

    وفي انتظار باقي حلقاتك .... الله يجزيك كل خير

    وشكرا





    __________________
    موت الصالح راحة لنفسه * وموت الطالح راحة للناس
    مسالم2002 غير متواجد حالياً

  7. #7
    عضو جديد
    تاريخ التسجيل
    Nov 2003
    المشاركات
    24


    موضوع جميل , ننتظر البقيه





    __________________
    هل تريد افلام فلاشيه احترافيه لموقعك ؟؟

    تصميمات مواقع احترافيه , تصميم فلاش احترافى بجميع انواعه , تصاميم جرافيك احترافيه

    ارسعار لا تقارن...
    aCtion غير متواجد حالياً

  8. #8
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998


    كلام غير صحيح

    المتغيرات التي في الصفحة لا يمكن تعديلها عن طريق الرابط

    وجربوا

    أولا :


    أنشئ ملفا اسمه

    varcon.php

    كود PHP:

    <?
    $op
    =1;

    ?>

    2 - أنشء ملفا اسمه var.php

    كود PHP:
    <?

    include "varcon.php";

    echo 
    $op;

    ?>
    في المتصفح

    اكتب الرابط التالي

    var.php?op=4

    ستلحظ أن البرنامج سيطبع لك رقم واحد

    للتجربة :

    http://www.toarab.ws/scripts/var.php?op=1

    http://www.toarab.ws/scripts/var.php?op=2

    http://www.toarab.ws/scripts/var.php?op=3

    http://www.toarab.ws/scripts/var.php?op=4

    النتيجة واحد

    ولي عودة ...





    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً

  9. #9
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998


    ملفا التجربة





    الملفات المرفقة الملفات المرفقة
    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً

  10. #10
    عضو نشيط جدا
    تاريخ التسجيل
    Dec 1999
    المشاركات
    437


    السلام عليكم
    في البدايه اشكر الاخ meylad على هذا الموضوع الشيق المفيد
    واشكر الاخ عبدالرحمن على تفضله بالمثال وبما تفضل به مشكوراً.

    أحببت أن ابين شيئاً فقط،

    كلام اخي meylad صحيح
    وكلام أخي عبدالرحمن صحيح

    لكن في حالات .

    فالأولويه للمتغيرات المسنده هي مايتم اسنادة في الصفحة ، ثم مايمرر عبر الرابط (1)
    انت ياأخي عبدالرحمن أسندت القيمة 1 الى المتغير op في نفس الصفحة ، مهما كانت القيمة المررة ، لن يتغير . هذا الكلام صحيح

    في مثال أخي meylad الأول، لم يكن هناك اي اسناد ، فوقتها يتم تمرير القيم في الرابط الى المتغير
    وتصبح ثغره . هذا ايضاً صحيح
    في مثاله التصحيحي ، قام بما قمت به انت تقريباً.

    انت قم بإزالة القيمة المسنده الى op وستجد ان الكلام صحيح ، هو استخدمه ك flag وليس كمتغير في حد ذاته. لم يسند له اي قيمة مسبقاً.

    طبعاً الاختلاف في الرأي لايفسد للود قضيه والمصلحة العامه تعلو كل شيء وأعتذر مقدماً عن أي خطأ

    هذا وبالله التوفيق .

    (1) يمكن تغيير اولوية الاسناد عن طريقة ملف php.ini . بحيث تطغي قيم Get أو Post على ال Cookies أو حتى على القيم المسندة في الصفحة. هذا من خلال السطر التالي :

    كود PHP:
    variables_order "EGPCS" 
    ومن ثم اعادة تشغيل الاباتشي في حالة كون ال PHP محملة ك module





    T_zone غير متواجد حالياً

  11. #11
    عضو نشيط
    تاريخ التسجيل
    Feb 2003
    المشاركات
    76


    الاخ / مسالم2002 والاخ/aCtion

    أشكر لكم مروركم

    الاخ / عبدالرحمن
    ركز في الدرس تجد ان المثال المدرج يتطرق لشرط .

    دعني أتحدث بشكل أوضح :

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

    في مثالك المدرج:
    هو عبارة عن أنك تعطي المتغير قيمة من المتصفح ثم تستدعي ملف يغير قيمة المتغير !! مالمشكلة هنا ! لا يوجد ثغرة يمكن أن تستغل أصلا لأن القيمة قمت بتغييرها من داخل كودك . وكما هو معلوم برمجيا في معظم لغات البرمجة ومعظم الحالات فان قيمة المتغير هي على آخر قيمة يأخذها . يعني أول قيمة كانت قيمة المتصفح ثم قمت بتغييرها من داخل الكود ! لا يوجد ثغرة يمكن أن تستغل .. مثالك المدرج يختلف عن الحالة الموجودة بالدرس . أرجو التركيز وقراءة الكودين جيدا سيتظح لك الفرق وأي سؤال أنا تحت أمرك

    T_zone الأخ/

    أشكرك على شرحك الوافي .. وكلامك 100% سليم .بالضبط هذا هو ماأردت إيصاله للأخ عبدالرحمن . شكراً لك أخي الكريم إثراءك الموضوع .






    __________________
    وَدّعْتُهـَـا وَدُمُــوْعِيْ مَزْجُ أدْمُعِهَا
    وَقَبـَـلَتْـنِي عَلَىْ خَوْفٍ فَمَــاً لِـفَــمِ
    فَذُقْــتُ مـَـاءَ حَيـَـاةٍ مِنْ مُقَبَلٍــهَا
    لَو صـََـاب تـُـرباً لأحْيـَا سَالِفَ الأُمَمِ
    meylad غير متواجد حالياً

  12. #12
    عضو فعال
    تاريخ التسجيل
    Feb 2003
    المشاركات
    1,308


    ممتاز وننتظر البقية





    fnan4arab غير متواجد حالياً

  13. #13
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998


    صدقتما

    وأنا أستخدم هذه الطريقة

    كود PHP:
    if(login_function($user$pass))     {
              include(
    "admin.php");

        } 






    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً

  14. #14
    Banned
    تاريخ التسجيل
    Feb 2003
    المشاركات
    143


    جميل للغاية , يعطيك العافية

    على التنبيه بهذه الثغرات الخطيرة

    ولكن هذه الثغرات تحدث من المبرمج

    وليست من اللغة بنفسها , حتى لا يعتقد

    القارئ ان هذه هي ثغرات في نفس اللغة





    rooor غير متواجد حالياً

  15. #15


    الأخطاء التي يقع فيها مبرمجي ال php كثيرة..

    منها ثغرة ال include الشهيرة التي تحدد بمتغير

    فمثلاً:
    كود PHP:
    <?
    $root 
    './';
    include(
    $root.'a.php');
    ?>
    وفي ملف a.php
    كود PHP:
    <?
    ..................
    include(
    $root.'foo.bar');
    .................
    ?>
    تمكن المخترق من تمرير قيمة $root في ال GLOBAL إذا كان ال REGISTER GLOBALS = on...





    __________________
    ArabBB ... SoooooN!
    Al Mobarmeg المبرمج غير متواجد حالياً





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض