المتغيرات ذات النطاق العام العالي (Superglobal Variables) في PHP
تُعد المتغيرات ذات النطاق العام العالي (Superglobal Variables) في لغة البرمجة PHP من أهم الأدوات الأساسية التي يستخدمها المطورون للتفاعل مع مختلف عناصر البيئة البرمجية مثل النماذج، الجلسات، ملفات تعريف الارتباط، وبيانات السيرفر. هذه المتغيرات تُعتبر بمثابة مداخل رئيسية للوصول إلى معلومات حساسة وضرورية لمعالجة البيانات القادمة من المستخدمين، والتفاعل مع إعدادات الخادم (Server)، وإدارة الجلسات والمصادقة، والكثير من المهام الأخرى. تتميز هذه المتغيرات بأنها متاحة في جميع أنحاء سكربت PHP دون الحاجة إلى تمريرها بشكل صريح عبر الدوال أو الكائنات.
في هذا المقال، سيتم التطرق بشكل موسع إلى مفهوم المتغيرات ذات النطاق العام العالي، أنواعها، كيفية استخدامها، المخاطر المرتبطة بها، وأفضل الممارسات الأمنية والبرمجية للتعامل معها. كما سيتم إدراج جدول توضيحي لأهم المتغيرات المستخدمة، مع أمثلة عملية توضح كيفية التعامل مع كل متغير منها.
أولاً: تعريف المتغيرات ذات النطاق العام العالي
تُعرف المتغيرات ذات النطاق العام العالي في PHP بأنها مجموعة من المتغيرات المضمنة تلقائياً ضمن البيئة التنفيذية للسكربت، وتكون متاحة على نطاق واسع داخل البرنامج دون الحاجة إلى التصريح عنها أو تمريرها كوسيط. هذه المتغيرات يتم تهيئتها بشكل مسبق من قبل محرك PHP، وتكون مرتبطة عادة ببيانات الإدخال والإخراج وبيئة التشغيل.
ثانياً: أنواع المتغيرات ذات النطاق العام العالي في PHP
توجد عدة متغيرات Superglobal تُستخدم في PHP، وكل واحدة منها تلعب دورًا مختلفًا حسب نوع التطبيق أو السيناريو البرمجي المطلوب. من أهم هذه المتغيرات ما يلي:
| اسم المتغير | الوصف |
|---|---|
$_GET |
يحتوي على البيانات المرسلة عبر عنوان URL باستخدام طريقة GET |
$_POST |
يحتوي على البيانات المرسلة من خلال النماذج باستخدام طريقة POST |
$_REQUEST |
يحتوي على البيانات المرسلة عبر GET وPOST وCOOKIE |
$_SESSION |
يستخدم لتخزين بيانات المستخدم عبر الصفحات أثناء الجلسة |
$_COOKIE |
يحتوي على البيانات المرسلة عبر ملفات تعريف الارتباط |
$_SERVER |
يحتوي على معلومات عن السيرفر والبيئة التنفيذية |
$_FILES |
يحتوي على معلومات الملفات المرفوعة من خلال النماذج |
$_ENV |
يحتوي على المتغيرات البيئية الخاصة بنظام التشغيل |
$_GLOBALS |
يحتوي على كافة المتغيرات العامة المعرفة في نطاق عالمي |
ثالثاً: شرح مفصل لكل متغير Superglobal مع الأمثلة
1. $_GET
يُستخدم لاستقبال البيانات المرسلة في رابط URL. هذه الطريقة تُستخدم عادة لتمرير البيانات البسيطة مثل معرّف منتج أو اسم مستخدم.
php// index.php?name=Ali
echo $_GET['name']; // النتيجة: Ali
العيب الرئيسي في $_GET هو أنه يعرض البيانات في شريط العنوان، مما يجعله غير مناسب لإرسال بيانات حساسة.
2. $_POST
يُستخدم لاستقبال البيانات المرسلة من النماذج بطريقة أكثر أماناً من GET، حيث لا تظهر البيانات في شريط العنوان.
php
php// submit.php
echo $_POST['email'];
3. $_REQUEST
يجمع بين $_GET و $_POST و $_COOKIE. على الرغم من مرونته، إلا أن استخدامه يُعد غير آمن في بعض الحالات، لأنه لا يُحدد مصدر البيانات بوضوح.
phpecho $_REQUEST['username'];
4. $_SESSION
يُستخدم لتخزين البيانات الخاصة بالمستخدم خلال الجلسة الواحدة، ويمكن استخدامها لتتبع المستخدمين وتخزين المعلومات بينهم وبين صفحات متعددة.
phpsession_start();
$_SESSION['user'] = 'Ahmed';
echo $_SESSION['user']; // Ahmed
5. $_COOKIE
يُستخدم لتخزين معلومات على جهاز المستخدم، وتبقى متاحة حتى بعد إغلاق المتصفح.
phpsetcookie("lang", "ar", time() + 3600);
echo $_COOKIE["lang"];
6. $_SERVER
يحتوي على مجموعة من المعلومات المتعلقة بالسيرفر والبيئة، مثل عنوان IP، اسم الخادم، وغيرها.
phpecho $_SERVER['SERVER_NAME'];
echo $_SERVER['REMOTE_ADDR'];
7. $_FILES
يُستخدم للتعامل مع الملفات المُحمّلة من خلال النماذج.
php
php// upload.php
$filename = $_FILES['fileToUpload']['name'];
$tmpPath = $_FILES['fileToUpload']['tmp_name'];
move_uploaded_file($tmpPath, "uploads/" . $filename);
8. $_ENV
يُستخدم للحصول على المتغيرات البيئية للنظام والتي يمكن إعدادها مسبقاً على الخادم.
phpecho $_ENV['PATH'];
9. $_GLOBALS
يُستخدم للوصول إلى المتغيرات العامة المعرفة خارج الدوال.
php$site = "Mwade3.com";
function showSite() {
echo $GLOBALS['site'];
}
رابعاً: الفرق بين المتغيرات Superglobal والمتغيرات الأخرى
ما يميز هذه المتغيرات هو مدى توافرها في جميع أجزاء البرنامج بدون الحاجة لتمريرها، على عكس المتغيرات المحلية أو العامة العادية التي تتطلب تصاريح أو تمريرها عبر الوسائط. هذا التوافر يُعزز من قدرتها على نقل البيانات عبر أجزاء مختلفة من التطبيق، لكنه أيضاً قد يُشكّل ثغرة أمنية في حال إساءة استخدامها.
خامساً: المخاطر الأمنية المرتبطة باستخدام Superglobals
تُعد المتغيرات ذات النطاق العام العالي من أهم أبواب استهداف البرمجيات من قبل المهاجمين في حال عدم التعامل معها بشكل صحيح. أهم المخاطر تتمثل في:
-
حقن الأوامر (Command Injection): إذا تم تمرير بيانات المستخدم مباشرة إلى أوامر النظام.
-
حقن SQL: عند استخدام بيانات
$_GETأو$_POSTفي استعلامات قواعد البيانات دون تعقيم. -
هجمات XSS: عندما يتم عرض بيانات المستخدم في الصفحة دون ترشيحها.
لحماية التطبيق، يجب اتباع تقنيات تعقيم البيانات (Sanitization) والتحقق من صحتها (Validation)، بالإضافة إلى استخدام Prepared Statements مع قواعد البيانات.
سادساً: أفضل الممارسات عند استخدام Superglobal Variables
لضمان استخدام آمن وفعال لهذه المتغيرات، يُفضل الالتزام بالتوصيات التالية:
-
التحقق من وجود البيانات قبل استخدامها:
phpif (isset($_GET['id'])) {
$id = intval($_GET['id']);
}
-
تعقيم البيانات الداخلة:
php$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
-
تجنب استخدام
$_REQUESTإلا للضرورة القصوى. -
استخدام الجلسات فقط عند الحاجة الفعلية لتقليل استهلاك الموارد.
-
التحكم في صلاحيات الوصول للملفات المرفوعة والتأكد من نوعية الملفات.
سابعاً: الفرق بين $_SESSION و $_COOKIE
كثيراً ما يختلط الأمر على المطورين المبتدئين عند اختيارهم بين $_SESSION و $_COOKIE. النقاط التالية توضح الفرق بينهما:
| العنصر | $_SESSION |
$_COOKIE |
|---|---|---|
| التخزين | في الخادم | في جهاز المستخدم |
| الأمان | أكثر أماناً | أقل أماناً |
| الحجم المسموح | أكبر | محدود عادةً بـ 4 كيلوبايت |
| إمكانية الوصول | خلال الجلسة فقط | حتى انتهاء مدة الصلاحية |
| الاستخدام الشائع | معلومات تسجيل الدخول، سلة الشراء | تفضيلات المستخدم، اللغة المختارة |
ثامناً: استخدام $_FILES وتحميل الملفات بشكل آمن
عند التعامل مع $_FILES يجب الحذر من الثغرات الأمنية المرتبطة بتحميل الملفات. من النصائح المهمة:
-
التحقق من نوع الملف باستخدام
mime_content_type. -
رفض الامتدادات الخطيرة مثل
.php,.exe. -
تغيير اسم الملف قبل حفظه لتجنب تنفيذ الملفات الخبيثة.
-
التأكد من حجم الملف وعدم السماح بأحجام كبيرة.
تاسعاً: تأثير المتغيرات Superglobal على أداء التطبيق
رغم فوائدها الكبيرة، إلا أن الاستخدام غير المدروس لهذه المتغيرات قد يؤدي إلى مشاكل في الأداء، خصوصاً عند التعامل مع عدد كبير من البيانات أو جلسات طويلة الأمد. من الأفضل استخدام هذه المتغيرات فقط عند الحاجة، والعمل على تحرير الموارد (كالجلسات) بعد الانتهاء منها.
عاشراً: خلاصة واستنتاج
تشكل المتغيرات ذات النطاق العام العالي في PHP حجر الزاوية في تطوير تطبيقات ويب ديناميكية وآمنة. تمكن هذه المتغيرات المطور من التعامل مع المدخلات والمخرجات وبيئة التشغيل بسهولة، لكنها تتطلب وعياً تاماً بمخاطرها الأمنية وكيفية إدارتها بفعالية. توفر PHP من خلال هذه الأدوات إمكانيات واسعة لبناء تطبيقات متقدمة، ولكن يبقى الاستخدام السليم لها هو العامل الحاسم بين تطبيق قوي وآخر عرضة للهجمات.
المصادر والمراجع:

