مجموعات Google
اشترك في مجموعة montadaphp.net حتى تصلك أخبار المنتدى
البريد الإلكتروني:
زيارة هذه المجموعة
صفحة 1 من 3 123 الأخيرةالأخيرة
النتائج 1 إلى 20 من 50

الموضوع: register_globals - دراسة مفصلة

  1. #1
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    الدولة
    Mansoura, Egypt
    السن
    33
    المشاركات
    3,386
    معدل تقييم المستوى
    10

    افتراضي register_globals - دراسة مفصلة

    السلام عليكم ورحمة الله وبركاته

    نبذة عن المشكلة
    مشكلة register_globals حدثت بعد طرح الاصدار PHP v.4.2.1، حيث تم جعل القيمة الافتراضية لـ register_globals تساوي off، مما أدى الى توقف الكثير والكثير من السكريبتات المطروحة قبل هذا الوقت والتي كانت تعتمد في عملها على الوضعية on لـ register_globals.

    ولكن لماذا تم تغيير القيمة الافتراضية لهذه الخاصية؟
    مما هو معروف لأي مبرمج متمرس ان هذا التغيير هو اكبر تغيير حدث في لغة PHP منذ انشائها، وهو لم يكن وليد الصدفة ولكن القرار كان صعب بالنسبة لمجتمع PHP لأن المشكلة هنا تتعلق بأمن البرمجة.
    نعم المشكلة تتعلق بالأمن، لأن ترك الخاصية register_globals في الوضع on هو بمثابة ثغرة امنية خطيرة جداً، تؤدي الى وصول اي متصفح للسكريبت الى بيانات غير مصرح له برؤيتها.
    وإليك هذا المثال لتوضيح خطر تشغيل الخاصية:
    كود PHP:
    <?php
    // هنا يتم من ان المستخدم أدمن واذا تم التحقق بنجاح يتم اعطاء المتغير $admin القيمة true
    if (login_correct()) {
       
    $admin true;
    }
     
    // ولكن يمكن تخطي هذا بكل بساطة في حالة ترك الخاصية مشغلة// حيث يمكن تمرير المتغير $admin في رابط الصفحة هكذا index.php?admin=1
    if ($admin) {
       include 
    "admin/index.php";
    }
    في الكود السابق، عند تشغيل الخاصية، يمكن تخطي دالة التحقق من الأدمن بسهولة عن طريق تمرير قيمة المتغير $admin في رابط الصفحة.
    اما عند ايقاف الخاصية، فلا يمكن تمريرها لان المتغير الممرر في الرابط ستكون الاشارة اليه بالاسم $_GET['admin'] بدلا من $admin.

    كيف تتصرف حيال السكريبتات القديمة التي لا تعمل؟
    1- تحديث السكريبت بتركيب اصدار جديد او تحديث الاكواد يدوياً
    وهو الحل الأمثل والأفضل، حيث يتوافر لديك خيارين:
    • تحميل نسخة جديدة من السكريبت تدعم الوضعية الجديدة للخاصية register_globals.
    • تحديث الأكواد يدوياً، ويتم ذلك باتباع المنهج التالي:
    • الاشارة الى المتغيرات المرسلة بـ GET و POST بالاسم المفصل كـ $_GET['variable'] و $_POST['variable'] بدلا من $variable.
    • الاشارة الى متغيرات السيشن بالطريقة $_SESSION['variable'] بدلا من $variable.
    • الاشارة الى متغيرات الكوكيز بالطريقة $_COOKIE['variable'] بدلا من $variable.
    2- استخراج المتغيرات من المصفوفات $_GET ، $_POST ، $_SESSION و $_COOKIE
    يمكنك تعديل الملف الذي لا يعمل عن طريق اضافة الكود التالي الى بداية الملف:
    كود PHP:
    extract($_POST);
    extract($_GET);
    extract($_SESSION);
    extract($_COOKIE); 
    3- تشغيل الخاصية register_globals عن طريق ملف htacces
    بالرغم من خطورة هذه الطريقة لما يترتب عليها من ثغرات في السكريبت، إلا أنها تبقى طريقة ناجحة وفعالة لتشغيل السكريبت على مسئوليتك الخاصة.
    تقوم في هذه الطريقة برفع ملف htacces. يحتوي على الكود التالي:
    كود:
    php_flag register_globals on
    بعد رفع الملف الى مجلد السكريت، يفترض ان يعمل السكريبت بشكل سليم.

  2. #2
    pRO
    pRO غير متواجد حالياً
    عضو نشيط
    تاريخ التسجيل
    15-01-2007
    الدولة
    فلسطين
    السن
    25
    المشاركات
    85
    معدل تقييم المستوى
    6

    افتراضي

    مشكور يا غالى والى الأمام
    - нαSαŋ -

  3. #3
    عضو نشيط
    تاريخ التسجيل
    15-01-2007
    المشاركات
    153
    معدل تقييم المستوى
    6

    افتراضي

    جزاك الله خير
    بو مُجَاهِد

  4. #4
    حسن من المغرب
    ضيف

    افتراضي شكراً جزيلاً

    شكراً جزيلاً أخي الكريم لشرحك الرائع...

  5. #5
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    الدولة
    Mansoura, Egypt
    السن
    33
    المشاركات
    3,386
    معدل تقييم المستوى
    10

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة pRO مشاهدة المشاركة
    مشكور يا غالى والى الأمام
    اقتباس المشاركة الأصلية كتبت بواسطة مُجَاهِد مشاهدة المشاركة
    جزاك الله خير
    اقتباس المشاركة الأصلية كتبت بواسطة حسن من المغرب مشاهدة المشاركة
    شكراً جزيلاً أخي الكريم لشرحك الرائع...
    مشكورين اخواني وجزاكم الله كل خير

  6. #6
    عضو جديد
    تاريخ التسجيل
    04-02-2007
    المشاركات
    35
    معدل تقييم المستوى
    0

    افتراضي

    اخوي coder بصراحه ابدعت وجزاك الله خير

    ولكن عندي استفسار

    عندي سكربت فرضا لا يعمل الا اقوم برفع ملف htacces. يحتوي على الكود التالي:
    كود:
    php_flag register_globals on
    فما العمل >>> اللي فهمته من الموضوع هو تحويل المتغيرات العاديه الى
    بـ GET و POST
    كيف اقوم بعمل المتغيرات بهذه الحاليه >>> هل كالتالي فرضا

    كود PHP:
    $normal $_GET['normal'
    او كالتالي
    كود PHP:
    $normal $_GET['nor'
    ايهما الاصح

    وايضا المتغير هذا
    كود PHP:
    $_POST['variable'
    ماالفرق بينه وبين السابق

    مع العلم اني السكربت الذي لدي بصفحة العرض اقوم بعمل متغير عادي حتى يعرض لي المحتوى .

    واسف للاطاله
    التعديل الأخير تم بواسطة normal ; 05-02-2007 الساعة 03:39 PM

  7. #7
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    الدولة
    Mansoura, Egypt
    السن
    33
    المشاركات
    3,386
    معدل تقييم المستوى
    10

    افتراضي

    أهلا ومرحبا اخي الكريم

    عندي سكربت فرضا لا يعمل الا اقوم برفع ملف htacces. يحتوي على الكود التالي:
    كود:
    php_flag register_globals on
    كما ذكرت في الدرس هذه الطريقة هي آخر الطرق التي ينبغي ان تلجأ لها.. لأنها تتسبب في فتح ثغرات في السكريبت..

    فما العمل >>> اللي فهمته من الموضوع هو تحويل المتغيرات العاديه الى
    فالحل الأفضل هو:
    ان تستخدم المصفوفتين $_GET و $_POST لاستقبال هذه المتغيرات
    بمعنى لو كان رابط السكريبت بهذا الشكل: index.php?action=register وهو يعبر عن المتغير action ممرر بالطريقة GET ...
    فلا تستقبل قيمة المتغير بالطريقة $action بل استخدم بدلا منها
    كود PHP:
    $_GET['action'
    تحياتي

  8. #8
    عضو جديد
    تاريخ التسجيل
    04-02-2007
    المشاركات
    35
    معدل تقييم المستوى
    0

    افتراضي

    تسلم اخوي coder وقواك الله

    بمعنى ان المتغير سيصبح بالشكل النهائي هكذا

    $action = $_GET['action'];

    =========

    طيب معلش ياغالي لازم استوعب الشغله علشان ترسخ المعلومه
    وعملت مثال على هالطريقه اللي شرحتها انت وما ادري هل صحيحه ام لا !!

    كود PHP:
    <?php
    include("config.php");

    if(!isset(
    $action)) $action $_GET['one'];
    IF (
    $action=="one"){

    $op1 "alslam alicom wrhmt allah wbrkath<br><br>";
    $op2 "welcom to my site<br>";
    $op3 "very very nice<br>";
    echo 
    "$op1";
    echo 
    "$op2";
    echo 
    "$op3";


    }ELSEIF (
    $action=="tow"){
    $op1_1 "goooood morning<br><br>";
    echo 
    "$op1_1";


    }ELSEIF (
    $action=="three"){
    echo 
    "<br>";
    echo 
    "<br><br>";
    $stats mysql_query("select * from news");
    $text_stats mysql_num_rows($stats);
    echo 
    "news number $text_stats .";


    $sql    "SELECT * FROM news where id=$id";
    $result mysql_query ($sql) or die ("Query failed");
    $row    mysql_fetch_array($result);
    $num_id   $row['id'];
    $num_name $row['name'];
    $num_web  $row['link'];
    }
    ?>
    >>>>>> هل الاستعلامات بالشكل الصحيح ام لابد من اضافة المتغيرات جيت لها !!

    وما الفرق بين كلا من GET و POST أو كلاهما يلبي الغرض !!


    وشاكر لك سعة صدرك

  9. #9
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    الدولة
    Mansoura, Egypt
    السن
    33
    المشاركات
    3,386
    معدل تقييم المستوى
    10

    افتراضي

    بمعنى ان المتغير سيصبح بالشكل النهائي هكذا

    $action = $_GET['action'];
    كلام سليم


    طيب معلش ياغالي لازم استوعب الشغله علشان ترسخ المعلومه
    وعملت مثال على هالطريقه اللي شرحتها انت وما ادري هل صحيحه ام لا !!

    كود PHP:
    <?php
    include("config.php");
     
    if(!isset(
    $action)) $action $_GET['one'];
    IF (
    $action=="one"){
     
    $op1 "alslam alicom wrhmt allah wbrkath<br><br>";
    $op2 "welcom to my site<br>";
    $op3 "very very nice<br>";
    echo 
    "$op1";
    echo 
    "$op2";
    echo 
    "$op3";
     
     
    }ELSEIF (
    $action=="tow"){
    $op1_1 "goooood morning<br><br>";
    echo 
    "$op1_1";
     
     
    }ELSEIF (
    $action=="three"){
    echo 
    "<br>";
    echo 
    "<br><br>";
    $stats mysql_query("select * from news");
    $text_stats mysql_num_rows($stats);
    echo 
    "news number $text_stats .";
     
     
    $sql    "SELECT * FROM news where id=$id";
    $result mysql_query ($sql) or die ("Query failed");
    $row    mysql_fetch_array($result);
    $num_id   $row['id'];
    $num_name $row['name'];
    $num_web  $row['link'];
    }
    ?>
    المثال صحيح 100%
    والاستعلامات أيضاً صحيحة ولا يجب أن تستخدم هنا في هذا المثال المتغيرات GET في الاستعلام
    ولكن مثلا في حال انك تريد عرض بيانات عن العميل رقم 15 في عملاء الشركة
    فيصبح مثلا رابط السكريبت المسئول عن ذلك بهذه الطريقة
    show.php?customer=15
    فتقوم انت باستقبال قيمة رقم العميل من الرابط والاستعلام عنها في الداتابيز كالتالي:
    كود PHP:
    $customer intval($_GET['customer']);
    $query "SELECT * FROM `customers` WHERE id=$customer"
    ستلاحظ في السطر الأول من الكود اننا استخدمنا الدالة intval ووظيفتها هو التحقق من ان القيمة الممررة في الرابط رقم صحيح وارجاع هذا الرقم اما ان لم يكن رقم صحيح فسترجع القيمة صفر، والغرض منها هو الأمان بالدرجة الأولى ولتجنب مخاطر الـ SQL INJECTION.

    وما الفرق بين كلا من GET و POST
    أو كلاهما يلبي الغرض !!
    الفرق بينهما واضح جداً
    فالمصفوفة GET تعبر عن المتغيرات الممررة في رابط السكريبت مثل المثال السابق
    اما المصفوفة POST فتعبر عن المتغيرات الممررة في النماذج من النوع POST مثل النماذج التي تستخدم لتسجيل الدخول او لتغيير كلمات المرور او اي حالة لا نريد البيانات ان تظهر في رابط الملف، حيث انها لا تظهر المتغيرات في رابط الملف مثل الطريقة GET (اقرأ أكثر عن النماذج GET و POST)
    وان شاء الله اقوم بوضع دروس توضح انواع النماذج وفيم يستخدم كل نوع قريبا جداًً....

    تحياتي لك

  10. #10
    عضو جديد
    تاريخ التسجيل
    04-02-2007
    المشاركات
    35
    معدل تقييم المستوى
    0

    افتراضي

    اخوي coder لاهنت ياغالي وقواك ربي

    رسخت المعلومه ان شاء الله

    والله لايحرمك الأجر ان شاء الله

  11. #11
    عضو جديد
    تاريخ التسجيل
    04-02-2007
    المشاركات
    35
    معدل تقييم المستوى
    0

    افتراضي

    اخوي للاسف الكود اللي بالاعلى اللي عملته انا كمثال لا يعمل

    كود PHP:
    <?php
    include("config.php");
     
    if(!isset(
    $action)) $action $_GET['one'];
    IF (
    $action=="one"){
     
    $op1 "alslam alicom wrhmt allah wbrkath<br><br>";
    $op2 "welcom to my site<br>";
    $op3 "very very nice<br>";
    echo 
    "$op1";
    echo 
    "$op2";
    echo 
    "$op3";
     
     
    }ELSEIF (
    $action=="tow"){
    $op1_1 "goooood morning<br><br>";
    echo 
    "$op1_1";
     
     
    }ELSEIF (
    $action=="three"){
    echo 
    "<br>";
    echo 
    "<br><br>";
    $stats mysql_query("select * from news");
    $text_stats mysql_num_rows($stats);
    echo 
    "news number $text_stats .";
     
     
    $sql    "SELECT * FROM news where id=$id";
    $result mysql_query ($sql) or die ("Query failed");
    $row    mysql_fetch_array($result);
    $num_id   $row['id'];
    $num_name $row['name'];
    $num_web  $row['link'];
    }
    ?>

    عند الدخول عليه تصبح الصفحه خاليه تماما بيضاء اللوند

    وعند الدخول الى one يظهر لكي الكلام ولكن على الدخول لاي صفحه اخرى مثلا tow او three يذهب بي الى الصفحه one !!

    ما العمل ؟

  12. #12
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    الدولة
    Mansoura, Egypt
    السن
    33
    المشاركات
    3,386
    معدل تقييم المستوى
    10

    افتراضي

    اكتب لي الرابط الكامل الذي تستخدمه للدخول لهذه الصفحة

  13. #13
    عضو جديد
    تاريخ التسجيل
    04-02-2007
    المشاركات
    35
    معدل تقييم المستوى
    0

    افتراضي

    اخوي نفس الكود بالضبط جربته على موقع وما اشتغل كما ذكرت لك
    ولكن عندما رفعت ملف .htaccess وبه كود تفعيل الجلوبل اشغل الكود ميه ميه

    ------

    والواضح ان الخلل بالكود نفسه والله اعلم

  14. #14
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    الدولة
    Mansoura, Egypt
    السن
    33
    المشاركات
    3,386
    معدل تقييم المستوى
    10

    افتراضي

    نعم هناك خطأ بالكود

    استبدل هذا:
    كود PHP:
    if(!isset($action)) $action $_GET['one']; 
    بهذا
    كود PHP:
    $action $_GET['action']; 

  15. #15
    عضو جديد
    تاريخ التسجيل
    04-02-2007
    المشاركات
    35
    معدل تقييم المستوى
    0

    افتراضي

    تم تعديل الكون واصبح 100% شغال ولله الحمد

    وهو كالتالي :

    كود PHP:
    $action $_GET['action'];
    if(!isset(
    $action)) $action "cat";

    IF (
    $action=="cat"){
    echo 
    "hi coder";
    }ELSEIF (
    $action=="sub"){
    echo 
    "i love my dear coder";

    حيث لابد من وضع المتغير هكذا
    كود PHP:
    $action $_GET['action']; 
    ومن ثم عمل الكود كما بالاسفل

    وتسلم اخوي وقواك الله وربي يزيدك من العلم ما ينفعك وينفع به اخوانك المسلمين

    وبالتوفيق

  16. #16
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    الدولة
    Mansoura, Egypt
    السن
    33
    المشاركات
    3,386
    معدل تقييم المستوى
    10

    افتراضي

    وفقكم الله

  17. #17
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    الدولة
    Mansoura, Egypt
    السن
    33
    المشاركات
    3,386
    معدل تقييم المستوى
    10

    افتراضي رد : register_globals - دراسة مفصلة

    مشكورين اخواني وجزاكم الله كل خير

  18. #18
    عضو نشيط
    تاريخ التسجيل
    15-01-2007
    المشاركات
    51
    معدل تقييم المستوى
    6

    افتراضي رد : register_globals - دراسة مفصلة

    الاخوة الكرام

    واجهتني مشكلة بسكربت بسيط تجميع خاص ..وهو سكربت لاضافة الكتب

    www.asqalan.com/adab

    عند الضغط على اي رابط يرجعني الى الرئيسية ..
    المشكلة بملف index.php

    ملفات السكربت 3 ملفات

    الرجاء توجيهي بالخطوات التي اقوم بها بالتفصيل ( بعينكم الله )

    الملف مرفق

    شاكر لكم سعة صدركم
    الملفات المرفقة الملفات المرفقة

  19. #19
    * أبو عمــر * الصورة الرمزية coder
    تاريخ التسجيل
    24-12-2006
    الدولة
    Mansoura, Egypt
    السن
    33
    المشاركات
    3,386
    معدل تقييم المستوى
    10

    افتراضي رد : register_globals - دراسة مفصلة

    اقتباس المشاركة الأصلية كتبت بواسطة عسقلان مشاهدة المشاركة
    الاخوة الكرام

    واجهتني مشكلة بسكربت بسيط تجميع خاص ..وهو سكربت لاضافة الكتب

    www.asqalan.com/adab

    عند الضغط على اي رابط يرجعني الى الرئيسية ..
    المشكلة بملف index.php

    ملفات السكربت 3 ملفات

    الرجاء توجيهي بالخطوات التي اقوم بها بالتفصيل ( بعينكم الله )

    الملف مرفق

    شاكر لكم سعة صدركم
    الأخ الكريم عسقلان.. بالنسبة للملف الذي أرفقته index.php فالموضوع سهل وبسيط جداً
    فالملف يقوم بتمرير ثلاث متغيرات في الرابط وهم id و writer و cat
    بمعنى انك تجد غالبا الروابط لهذا الملف على الشكل index.php?cat=3 أو index.php?id=67 مثلاً
    ولتصحيح الأخطاء بهذا الملف وجعله يعمل جيداً يجب أن تستبدل الكود:
    كود PHP:
    if($cat=="" && $id=="" && $writer==""
    بهذا الكود:
    كود PHP:
    $cat $_GET['cat'];
    $id $_GET['id'];
    $writer $_GET['writer'];
    if(
    $cat=="" && $id=="" && $writer==""

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

    تحياتي لك
    محمود

  20. #20
    عضو نشيط
    تاريخ التسجيل
    15-01-2007
    المشاركات
    51
    معدل تقييم المستوى
    6

    افتراضي رد : register_globals - دراسة مفصلة

    اخي الكريم .. مشكور جدا لاهتمامك ..

    تم التعديل ونجاح التطبيق .. وجاري تعديل الملفات المتبقية ..

    www.asqalan.com/adab


    مرة اخرى بارك الله فيك .

صفحة 1 من 3 123 الأخيرةالأخيرة

LinkBacks (?)

  1. 02-01-2009, 01:27 AM
  2. 18-12-2008, 11:54 PM
  3. 26-11-2008, 06:29 PM
  4. 23-11-2008, 04:29 AM
  5. 15-10-2008, 06:19 AM
  6. 16-09-2008, 06:14 PM
  7. 14-09-2008, 06:58 AM
  8. 29-08-2008, 08:06 PM

معلومات الموضوع

الأعضاء الذين يشاهدون هذا الموضوع

الذين يشاهدون الموضوع الآن: 1 (0 من الأعضاء و 1 زائر)

المواضيع المتشابهه

  1. مشكلة Server Requirement Error: register_globals is disabled in your PHP configuration.
    بواسطة caboo في المنتدى مشاكل وحلول PHP Errors & Troubleshooting
    مشاركات: 3
    آخر مشاركة: 22-06-2009, 12:46 PM

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

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