البرمجة

المتغيرات Superglobal في PHP

المتغيرات ذات النطاق العام العالي (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
"post" action="submit.php"> "text" name="email"> "submit">
php
// submit.php echo $_POST['email'];

3. $_REQUEST

يجمع بين $_GET و $_POST و $_COOKIE. على الرغم من مرونته، إلا أن استخدامه يُعد غير آمن في بعض الحالات، لأنه لا يُحدد مصدر البيانات بوضوح.

php
echo $_REQUEST['username'];

4. $_SESSION

يُستخدم لتخزين البيانات الخاصة بالمستخدم خلال الجلسة الواحدة، ويمكن استخدامها لتتبع المستخدمين وتخزين المعلومات بينهم وبين صفحات متعددة.

php
session_start(); $_SESSION['user'] = 'Ahmed'; echo $_SESSION['user']; // Ahmed

5. $_COOKIE

يُستخدم لتخزين معلومات على جهاز المستخدم، وتبقى متاحة حتى بعد إغلاق المتصفح.

php
setcookie("lang", "ar", time() + 3600); echo $_COOKIE["lang"];

6. $_SERVER

يحتوي على مجموعة من المعلومات المتعلقة بالسيرفر والبيئة، مثل عنوان IP، اسم الخادم، وغيرها.

php
echo $_SERVER['SERVER_NAME']; echo $_SERVER['REMOTE_ADDR'];

7. $_FILES

يُستخدم للتعامل مع الملفات المُحمّلة من خلال النماذج.

php
"upload.php" method="post" enctype="multipart/form-data"> "file" name="fileToUpload"> "submit">
php
// upload.php $filename = $_FILES['fileToUpload']['name']; $tmpPath = $_FILES['fileToUpload']['tmp_name']; move_uploaded_file($tmpPath, "uploads/" . $filename);

8. $_ENV

يُستخدم للحصول على المتغيرات البيئية للنظام والتي يمكن إعدادها مسبقاً على الخادم.

php
echo $_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

لضمان استخدام آمن وفعال لهذه المتغيرات، يُفضل الالتزام بالتوصيات التالية:

  • التحقق من وجود البيانات قبل استخدامها:

php
if (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 من خلال هذه الأدوات إمكانيات واسعة لبناء تطبيقات متقدمة، ولكن يبقى الاستخدام السليم لها هو العامل الحاسم بين تطبيق قوي وآخر عرضة للهجمات.


المصادر والمراجع:

  1. PHP Manual: Superglobals

  2. OWASP Secure Coding Practices