جعل التعليمات البرمجية تعمل مع إيقاف تشغيل Register_globals

StackOverflow https://stackoverflow.com/questions/6633

  •  08-06-2019
  •  | 
  •  

سؤال

لقد ورثت بعض أكواد PHP القديمة التي تمت كتابتها مرة أخرى عندما كان استخدامها ممارسة معتادة register_globals (اعتبارًا من PHP 4.2.0، تم تعيين هذا التوجيه افتراضيًا على إيقاف التشغيل، وتم إصداره 22.أبريل 2002).

ونحن نعلم الآن أنه من السيئ بالنسبة للأمن أن يتم تمكينه.المشكلة هي كيف يمكنني العثور على جميع الأماكن في الكود التي أحتاج إلى استخدامها $_GET أو $_POST؟كان تفكيري الوحيد هو تعيين تقرير الأخطاء للتحذير من المتغيرات غير المهيأة ثم اختبار كل جزء من الموقع.هل توجد طريقة أسهل؟هل سيتعين علي اختبار كل مسار تعليمات برمجية في الموقع أم أن PHP ستعطي تحذيرًا على أساس الملف؟

هل كانت مفيدة؟

المحلول

إذا قمت بتعيين تقرير الأخطاء إلى E_ALL، فإنه يحذر في سجل الأخطاء بشأن المتغيرات غير المحددة المكتملة باسم الملف ورقم السطر (على افتراض أنك تقوم بتسجيل الدخول إلى ملف).ومع ذلك، فإنه سيتم تحذيرك فقط عندما يتعلق الأمر بمتغير غير محدد، لذلك أعتقد أنه سيتعين عليك اختبار كل مسار من مسارات التعليمات البرمجية.لا يبدو أن تشغيل php من سطر الأوامر يساعد أيضًا.

هناك أداة تصحيح تسمى xdebug، لم تجربها، ولكن ربما يمكن أن تكون مفيدة؟

نصائح أخرى

كتبت أ النصي باستخدام المدمج في رمز مميز المهام.إنه أمر صعب جدًا ولكنه يعمل مع قاعدة التعليمات البرمجية التي كنت أعمل عليها.أعتقد أنه يمكنك أيضًا استخدامها CodeSniffer.

يمكنك "تزييف" تأثير التسجيل العالمي يدويًا مع إضافة بعض الأمان.(لقد حصلت على هذا جزئيًا من شوكة osCommerce التي تسمى xoops)

//  Detect bad global variables
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES');
foreach ($bad_global_list as $bad_global ) {
    if ( isset( $_REQUEST[$bad_global] ) ) {
        die('Bad Global');
    }
}

//  Make global variables
foreach ($_REQUEST as $name -> $value) {
    $$name = $value; // Creates a varable nammed $name equal to $value.
}

على الرغم من أنك قد ترغب في تعديله لجعل التعليمات البرمجية الخاصة بك أكثر أمانًا، على الأقل عن طريق إضافة متغيرات التكوين العامة (مثل المسار وعنوان URL الأساسي) إلى قائمة العناصر العامة السيئة.

يمكنك أيضًا استخدامه لتجميع قائمة بجميع متغيرات get/post المستخدمة بسهولة لمساعدتك في نهاية المطاف على استبدال كافة تكرارات، على سبيل المثال $return_url، بـ $_REQUEST['return_url];

أعلم أن هناك طريقة لتعيين قيم php.ini لهذا البرنامج النصي باستخدام أمر معين، لذلك بحثت ووجدت هذا أيضًا - انتقل إلى آخر مشاركة في الصفحة

لقد وجدت أيضًا المشاركة التالية التي قد تكون مفيدة - انتقل إلى آخر مشاركة في الصفحة

سأضيف إلى هذا أكثر إذا لم يجد أحد إجابة ولكن لا بد لي الآن من اللحاق بالقطار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top