البرمجة

مرشحات PHP وتعقيم البيانات

المرشحات ودوال المرشح (Filter) المعقمة في PHP: الاستخدامات، الأنواع، وآليات الحماية من الثغرات

مقدمة

تُعد لغة PHP من أكثر اللغات استخدامًا في تطوير تطبيقات الويب، ويُعزى ذلك إلى مرونتها، سهولة تعلمها، وتوافر أدواتها المدمجة لمعالجة المدخلات والتحقق منها. واحدة من أبرز الأدوات التي تتيح للمطورين ضمان أمان التطبيقات وتصفية البيانات الواردة من المستخدمين هي “المرشحات” أو Filters، وهي مجموعة من الدوال والآليات المُضمنة ضمن مكتبة PHP القياسية (PHP Filter Extension)، والتي توفر وسيلة فعالة لتعقيم البيانات، التحقق منها، وتجنب الكثير من الثغرات الأمنية الشائعة مثل حقن الشيفرة (Code Injection) والهجمات عبر المواقع (Cross-site scripting – XSS) وحقن قواعد البيانات (SQL Injection).

هذا المقال يُسلّط الضوء على جميع الجوانب التقنية الخاصة بالمرشحات ودوال المرشح في PHP، ويشرح بالتفصيل آلية عملها، أنواعها، استخداماتها، بالإضافة إلى كيفية دمجها ضمن بيئات التطوير الحديثة، مع تقديم أمثلة واقعية لتطبيقاتها.


تعريف المرشحات في PHP

المرشح في PHP هو وظيفة تقوم بتصفية أو التحقق من صحة قيمة معينة. تستخدم هذه الوظائف بشكل شائع لمعالجة المدخلات (خصوصًا من النماذج Forms أو من المتغيرات العالمية مثل $_POST, $_GET, $_COOKIE, $_REQUEST) قبل استخدامها في عمليات أخرى. الهدف الأساسي من استخدام المرشحات هو حماية التطبيق من البيانات غير المتوقعة أو الضارة.

تم تضمين هذه الدوال ضمن امتداد filter الذي بدأ دعمه منذ الإصدار PHP 5.2.


أهمية المرشحات في تأمين التطبيقات

عند التعامل مع بيانات مدخلة من المستخدم، من الضروري جدًا ألا تُستخدم هذه البيانات مباشرة داخل البرنامج بدون التحقق منها. لأن المستخدم قد يُدخل بيانات خبيثة تهدف إلى اختراق النظام أو تغيير سلوكه، مثل شيفرات JavaScript خبيثة، أو استعلامات SQL. الفشل في تعقيم هذه البيانات قد يؤدي إلى:

  • تنفيذ شيفرة خبيثة داخل المتصفح (XSS)

  • تنفيذ أوامر داخل السيرفر (Command Injection)

  • اختراق قواعد البيانات (SQL Injection)

  • عرض بيانات حساسة عن النظام

لهذا، تأتي المرشحات كوسيلة مضمنة داخل PHP لتنفيذ التحقق والمعالجة والتعقيم بشكل منهجي وآمن.


دوال المرشحات الأساسية في PHP

1. filter_var()

الدالة filter_var() هي الأكثر استخدامًا. تستخدم لتصفية قيمة واحدة.

php
$value = "123abc"; $filtered = filter_var($value, FILTER_SANITIZE_NUMBER_INT); echo $filtered; // الناتج: 123

البنية العامة:

php
filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed

2. filter_input()

تُستخدم لتصفية متغير مدخل من مصدر معين (INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV).

php
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

3. filter_input_array()

تُستخدم لتصفية مجموعة من المتغيرات دفعة واحدة.

php
$args = array( 'email' => FILTER_VALIDATE_EMAIL, 'age' => array( 'filter' => FILTER_VALIDATE_INT, 'options' => array( 'min_range' => 18, 'max_range' => 100 ) ) ); $result = filter_input_array(INPUT_POST, $args);

4. filter_var_array()

تشبه filter_input_array() لكن تعمل على مصفوفة بيانات محلية بدلًا من المتغيرات العالمية.

php
$data = array( 'email' => '[email protected]', 'age' => 25 ); $filters = array( 'email' => FILTER_VALIDATE_EMAIL, 'age' => array( 'filter' => FILTER_VALIDATE_INT, 'options' => array( 'min_range' => 18, 'max_range' => 99 ) ) ); $sanitized = filter_var_array($data, $filters);

أنواع المرشحات في PHP

تنقسم المرشحات في PHP إلى قسمين أساسيين:

أولًا: مرشحات التحقق (Validation Filters)

تتحقق من صحة البيانات دون تعديلها. تُعيد القيمة الأصلية إذا كانت صالحة، وfalse إذا لم تكن كذلك.

الفلتر الاستخدام
FILTER_VALIDATE_BOOLEAN التحقق من قيمة منطقية
FILTER_VALIDATE_EMAIL التحقق من صحة البريد الإلكتروني
FILTER_VALIDATE_FLOAT التحقق من أن القيمة عدد عشري
FILTER_VALIDATE_INT التحقق من أن القيمة عدد صحيح
FILTER_VALIDATE_IP التحقق من عنوان IP
FILTER_VALIDATE_MAC التحقق من عنوان MAC
FILTER_VALIDATE_URL التحقق من رابط URL

ثانيًا: مرشحات التعقيم (Sanitizing Filters)

تقوم بإزالة أو تعديل الأحرف غير المرغوب بها.

الفلتر الاستخدام
FILTER_SANITIZE_EMAIL إزالة الأحرف غير الصالحة من البريد الإلكتروني
FILTER_SANITIZE_ENCODED ترميز السلاسل لأغراض URL
FILTER_SANITIZE_FULL_SPECIAL_CHARS تحويل الأحرف الخاصة إلى كيانات HTML
FILTER_SANITIZE_NUMBER_FLOAT إزالة جميع الأحرف ما عدا الأرقام والفواصل العشرية
FILTER_SANITIZE_NUMBER_INT إزالة جميع الأحرف ما عدا الأرقام وعلامة الطرح
FILTER_SANITIZE_SPECIAL_CHARS تحويل الأحرف الخاصة إلى كيانات HTML
FILTER_SANITIZE_STRING إزالة العلامات البرمجية HTML وPHP
FILTER_SANITIZE_URL إزالة الأحرف غير الصالحة من عناوين URL

مقارنة بين التحقق والتعقيم

الجانب التحقق (Validation) التعقيم (Sanitization)
الهدف التأكد من مطابقة البيانات لنمط معين تنظيف البيانات من الرموز غير المرغوبة
النتيجة عند الفشل FALSE قيمة مُعدّلة
المثال FILTER_VALIDATE_EMAIL FILTER_SANITIZE_EMAIL

استخدام خيارات متقدمة مع المرشحات

يمكن تمرير خيارات إضافية عبر مصفوفة options للتحكم الدقيق في عملية التصفية.

مثال: التحقق من عدد صحيح في مدى محدد

php
$age = "30"; $options = array( "options" => array( "min_range" => 18, "max_range" => 99 ) ); $validAge = filter_var($age, FILTER_VALIDATE_INT, $options);

تعقيم مدخلات النماذج

يُعتبر هذا من أهم تطبيقات المرشحات. المثال التالي يُظهر كيف يمكن تعقيم جميع المدخلات من نموذج:

php
$filters = array( "name" => FILTER_SANITIZE_STRING, "email" => FILTER_SANITIZE_EMAIL, "age" => array( "filter" => FILTER_VALIDATE_INT, "options" => array("min_range" => 18) ) ); $cleanData = filter_input_array(INPUT_POST, $filters);

تكامل المرشحات مع طبقات الأمان في التطبيق

1. الاستخدام داخل الطبقة الوسيطة (Middleware)

في إطار عمل مثل Laravel أو Symfony، يمكن استخدام المرشحات ضمن Middleware لمعالجة جميع الطلبات الواردة قبل وصولها إلى الـ Controller.

2. التكامل مع نماذج HTML

عند استقبال البيانات من النماذج، يجب تعقيمها قبل تخزينها أو عرضها:

php
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

3. التحقق قبل الإدخال إلى قاعدة البيانات

قبل تنفيذ أي استعلام SQL باستخدام بيانات من المستخدم:

php
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); if ($email !== false) { // إدخال آمن }

جدول يلخص أشهر المرشحات في PHP

نوع الفلتر اسم الفلتر الاستخدام الرئيسي
التحقق FILTER_VALIDATE_EMAIL التحقق من صحة البريد الإلكتروني
التحقق FILTER_VALIDATE_INT التحقق من أن القيمة عدد صحيح
التحقق FILTER_VALIDATE_URL التحقق من صحة الرابط
التعقيم FILTER_SANITIZE_STRING إزالة العلامات HTML وPHP
التعقيم FILTER_SANITIZE_EMAIL إزالة الأحرف غير الصالحة في البريد
التعقيم FILTER_SANITIZE_URL إزالة الرموز غير الصالحة في URL
التعقيم FILTER_SANITIZE_NUMBER_INT إزالة كل شيء ما عدا الأرقام
التعقيم FILTER_SANITIZE_FULL_SPECIAL_CHARS تحويل الأحرف الخاصة لكيانات HTML

الأداء والأمان

بما أن امتداد filter جزء مدمج من نواة PHP، فإن أداء هذه الدوال سريع جدًا مقارنة بحلول مخصصة يكتبها المطورون يدويًا. كما أن استخدامها يقلل من فرص ارتكاب أخطاء بشرية أثناء تنفيذ التحقق والتعقيم يدويًا.


أفضل الممارسات عند استخدام المرشحات

  1. التحقق أولاً، التعقيم لاحقًا: لا تكتفِ بالتعقيم، بل تحقق من صحة البيانات.

  2. حدد دائمًا نوع الفلتر بدقة: لتجنب تطبيق مرشحات غير مناسبة.

  3. استخدم الخيارات (options) لتحديد الحدود: مثل حدود الأرقام أو الأنماط.

  4. دمج التصفية مع الحماية من SQL Injection وXSS: التصفية لا تُغني عن استخدام أدوات مثل PDO وprepared statements.

  5. تعقيم كل البيانات التي تُعرض للمستخدم: حتى وإن كانت موثوقة، تجنبًا للهجمات غير المتوقعة.


خاتمة

تشكل دوال المرشح (Filter Functions) في PHP جزءًا أساسيًا من أدوات الحماية والموثوقية في تطوير تطبيقات الويب. من خلال استعمال filter_var() وfilter_input() وfilter_input_array() وغيرهم من الوظائف، يمكن للمطور السيطرة الكاملة على كيفية التعامل مع البيانات القادمة من المستخدمين، سواء عبر التحقق أو التعقيم، وبالتالي تعزيز أمان النظام ضد الثغرات المعروفة. إن فهم واستعمال هذه الأدوات بطريقة سليمة يُعد من الخطوات الجوهرية لتأمين التطبيقات وضمان جودة بياناتها.


المراجع:

  1. PHP Manual – Filters

  2. OWASP Foundation – Data Validation