تُستخدم مرشحات PHP للتحقق من صحة البيانات وتصفيتها من المصادر غير الآمنة، مثل مدخلات المستخدم.
تُستخدم مرشحات PHP للتحقق من صحة البيانات وتصفيتها من المصادر غير الآمنة.
يعد اختبار مدخلات المستخدم أو البيانات المخصصة والتحقق من صحتها وتصفيتها أجزاء مهمة من أي تطبيق ويب.
تم تصميم ملحقات مرشح PHP لجعل تصفية البيانات أسهل وأسرع.
تعتمد جميع تطبيقات الويب تقريبًا على المدخلات الخارجية. تأتي هذه البيانات عادةً من المستخدمين أو التطبيقات الأخرى (مثل خدمات الويب). باستخدام عوامل التصفية، يمكنك التأكد من حصول تطبيقك على نوع الإدخال الصحيح.
يجب عليك دائمًا تصفية البيانات الخارجية!
تعد تصفية المدخلات أحد أهم موضوعات أمان التطبيقات.
ما هي البيانات الخارجية؟
إدخال البيانات من النموذج
ملفات تعريف الارتباط
بيانات خدمات الويب
متغيرات الخادم
نتائج استعلام قاعدة البيانات
لتصفية المتغيرات، استخدم إحدى وظائف التصفية التالية:
filter_var() - تصفية متغير واحد من خلال مرشح محدد
filter_var_array() - يقوم بتصفية متغيرات متعددة بنفس المرشحات أو مرشحات مختلفة
filter_input - يأخذ متغير الإدخال ويقوم بتصفيته
filter_input_array - يأخذ متغيرات إدخال متعددة ويقوم بتصفيتها من خلال المرشحات نفسها أو المرشحات المختلفة
في المثال التالي، نقوم بالتحقق من صحة عدد صحيح باستخدام الدالة filter_var() :
<?php $int = 123 ؛ إذا ( ! filter_var ( $int , FILTER_VALIDATE_INT ) ) { echo ( " ليس عددًا صحيحًا قانونيًا " ) ; آخر { echo ( " عدد صحيح قانوني " ) ; ?>
يستخدم الكود أعلاه مرشح "FILTER_VALIDATE_INT" لتصفية المتغيرات.
إذا حاولنا استخدام متغير غير صحيح (مثل "123abc")، فسيكون الإخراج: "عدد صحيح غير صالح".
للحصول على قائمة كاملة بالوظائف والمرشحات، تفضل بزيارة الدليل المرجعي لمرشح PHP.
هناك نوعان من المرشحات:
التحقق من صحة عامل التصفية:
يستخدم للتحقق من صحة إدخال المستخدم
قواعد التنسيق الصارمة (مثل عنوان URL أو التحقق من صحة البريد الإلكتروني)
إرجاع النوع المتوقع في حالة النجاح أو FALSE في حالة الفشل
مرشح التعقيم:
يستخدم للسماح أو منع الأحرف المحددة في سلسلة
لا توجد قواعد تنسيق البيانات
تقوم دائمًا بإرجاع سلسلة
يتم استخدام الخيارات والأعلام لإضافة خيارات تصفية إضافية إلى عامل التصفية المحدد.
المرشحات المختلفة لها خيارات وأعلام مختلفة.
في المثال التالي، نقوم بالتحقق من صحة عدد صحيح باستخدام filter_var() مع خياري "min_range" و"max_range":
<?php $var = 300 ؛ $int_options = مصفوفة ( " خيارات " => مصفوفة ( " min_range " => 0 , " max_range " => 256 ) ) ; إذا ( ! filter_var ( $var , FILTER_VALIDATE_INT , $int_options ) ) { echo ( " ليس عددًا صحيحًا قانونيًا " ) ; آخر { echo ( " عدد صحيح قانوني " ) ; ?>
تمامًا مثل الكود أعلاه، يجب وضع الخيارات في مصفوفة مرتبطة تسمى "خيارات". إذا كنت تستخدم الأعلام، فلا يلزم أن تكون في مصفوفة.
نظرًا لأن العدد الصحيح هو "300"، وهو ليس ضمن النطاق المحدد، فإن مخرجات الكود أعلاه ستكون:
ليس عددًا صحيحًا قانونيًا
للحصول على قائمة كاملة بالوظائف والمرشحات، تفضل بزيارة الدليل المرجعي لمرشح PHP. يمكنك رؤية الخيارات والأعلام المتاحة لكل مرشح.
دعونا نحاول التحقق من صحة المدخلات من النموذج.
أول شيء يتعين علينا القيام به هو التأكد من وجود بيانات الإدخال التي نبحث عنها.
ثم نستخدم الدالة filter_input() لتصفية بيانات الإدخال.
في المثال التالي، يتم تمرير متغير الإدخال "email" إلى صفحة PHP:
<?php إذا ( ! filter_has_var ( INPUT_GET , " البريد الإلكتروني " ) ) { صدى ( " لا يوجد معلمة للبريد الإلكتروني " ) } آخر { لو ( ! filter_input ( INPUT_GET , " البريد الإلكتروني " , FILTER_VALIDATE_EMAIL ) ) { صدى " بريد إلكتروني غير صالح " } آخر { صدى " إنه بريد إلكتروني شرعي " } } ?>
يحتوي المثال أعلاه على متغير إدخال (بريد إلكتروني) تم تمريره عبر طريقة "GET":
التحقق من وجود متغير إدخال "البريد الإلكتروني" من النوع "GET"
في حالة وجود متغير الإدخال، تحقق مما إذا كان عنوان بريد إلكتروني صالحًا
دعنا نحاول تنظيف عنوان URL الذي تم تمريره من النموذج.
أولاً، نريد التأكد من وجود البيانات المدخلة التي نبحث عنها.
ثم نستخدم الدالة filter_input() لتنقية البيانات المدخلة.
في المثال التالي، يتم تمرير متغير الإدخال "url" إلى صفحة PHP:
<?phpif(!filter_has_var(INPUT_GET, "url")){ echo("لا توجد معلمة url");}else{ $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url;}?>
يحتوي المثال أعلاه على متغير إدخال (url) تم تمريره عبر طريقة "GET":
تحقق مما إذا كان هناك متغير إدخال "url" من النوع "GET"
إذا كان متغير الإدخال هذا موجودًا، فقم بتطهيره (إزالة الأحرف غير القانونية) وتخزينه في المتغير $url
إذا كان متغير الإدخال عبارة عن سلسلة مشابهة لما يلي: "http://www.ruåånoøøob.com/"، فسيبدو المتغير المعقم $url كما يلي:
تتكون النماذج عادةً من حقول إدخال متعددة. لتجنب الاستدعاءات المتكررة لدالة filter_var أو filter_input، يمكننا استخدام filter_var_array أو دالة filter_input_array.
في هذا المثال، نستخدم الدالة filter_input_array() لتصفية ثلاثة متغيرات GET. متغيرات GET المستلمة هي الاسم والعمر وعنوان البريد الإلكتروني:
<?php مرشحات $ = مجموعة ( " الاسم " => المصفوفة ( " مرشح " => FILTER_SANITIZE_STRING ) ، " العمر " => المصفوفة ( " مرشح " => FILTER_VALIDATE_INT ، " خيارات " => مصفوفة ( " الحد الأدنى_للنطاق " => 1 , " الحد الأقصى_للنطاق " => 120 ) ) , " البريد الإلكتروني " => FILTER_VALIDATE_EMAIL ) ; نتيجة $ = filter_input_array ( INPUT_GET , $ filters ) ; ( ! نتيجة $ [ " العمر " ] ) { echo ( " يجب أن يكون العمر بين 1 و 120. <br> " ) } elseif ( ! $result [ " email " ] ) { echo ( " البريد الإلكتروني غير قانوني <br> " ) } آخر { صدى ( " الإدخال صحيح " ) ; ?>
يحتوي المثال أعلاه على ثلاثة متغيرات إدخال (الاسم والعمر والبريد الإلكتروني) تم تمريرها عبر طريقة "GET":
يعين مصفوفة تحتوي على أسماء متغيرات الإدخال ومرشحات لمتغيرات الإدخال المحددة
قم باستدعاء الدالة filter_input_array()، وتتضمن المعلمات متغير الإدخال GET والمصفوفة التي تم تعيينها للتو
تحقق مما إذا كانت متغيرات "العمر" و"البريد الإلكتروني" في المتغير $result تحتوي على مدخلات غير قانونية. (إذا كان هناك إدخال غير قانوني، يكون متغير الإدخال FALSE بعد استخدام الدالة filter_input_array().)
يمكن أن تكون الوسيطة الثانية للدالة filter_input_array() عبارة عن مصفوفة أو معرف مرشح واحد.
إذا كانت هذه المعلمة هي معرف مرشح واحد، فسيقوم المرشح المحدد بتصفية جميع القيم في صفيف الإدخال.
إذا كانت المعلمة عبارة عن مصفوفة، فيجب أن يتبع المصفوفة القواعد التالية:
يجب أن يكون مصفوفة ترابطية تحتوي على متغيرات الإدخال التي تمثل مفاتيح المصفوفة (مثل متغير الإدخال "العمر")
يجب أن تكون قيمة هذا المصفوفة هي معرف عامل التصفية، أو مصفوفة تحدد عامل التصفية والأعلام والخيارات
باستخدام عامل التصفية FILTER_CALLBACK، يمكنك استدعاء وظيفة مخصصة واستخدامها كمرشح. بهذه الطريقة، لدينا سيطرة كاملة على تصفية البيانات.
يمكنك إنشاء وظيفتك المخصصة أو استخدام وظيفة PHP موجودة.
حدد وظيفة التصفية التي تنوي استخدامها بنفس طريقة الخيار المحدد. في مصفوفة ترابطية، بالاسم "خيارات".
في المثال التالي، نستخدم دالة مخصصة لتحويل كافة "_" إلى ".":
<?php وظيفة تحويل الفضاء ( سلسلة $ ) { يعود str_replace ( " _ " ، " . " ، $string ) } ؛ $string = " www_codercto_com ! " ; filter_var ( $string , FILTER_CALLBACK , array ( " options " => " ConvertSpace " ) ) ? >
المثال أعلاه يحول كل "_" إلى ".":
قم بإنشاء دالة تستبدل "_" بـ "."
قم باستدعاء الدالة filter_var() باستخدام مرشح FILTER_CALLBACK والمصفوفة التي تحتوي على وظيفتنا