Header Ads

فلاتر PHP



تستخدم فلاتر (تصفيات) PHP لفلترة و جعل البيانات شرعية التي تأتي من جهات غير محمية مثل مدخلات المستخدم .



ماهو فلتر / تصفية PHP ؟


تستخدم فلاتر (تصفيات) PHP لفلترة و جعل البيانات شرعية التي تأتي من جهات غير محمية مثل مدخلات المستخدم .

يعتبر اختبار أو تصفية مدخل مستخدم أو أي بيانات تقليدية خطوة مهمة لأي تطبيق على الانترنت .

تم تصميم زيادات فلاتر PHP لجعل فلترة البيانات أسهل وأسرع .



لماذا نستخدم الفلاتر ؟


غالباً تعتمد جميع تطبيقات الانترنت على مدخلات خارجية و ذلك يأتي من مستخدم أو من خلال تطبيق آخر ( مثل خدمات الويب ) و باستخدام الفلترة يمكنك أن تكون واثقاً بأن تطبيقك حصل على نوع المدخل الصحيح .

يجب دائماً استخدام الفلترة للبيانات الخارجية

تعتبر فلترة المدخلات واحدة من أهم القضايا الأمنية المهمة للتطبيقات .

ماهي البيانات الخارجية ؟

  • البيانات المدخلة من خلال النماذج .

  • الكوكيز cookies .

  • بيانات الويب الخدمية .

  • نتائج أوامر قواعد البيانات .



الوظائف و الفلاتر


لفلترة أو تصفية متغير يمكن استخدام احدى هذه الأكواد الوظيفية :

  • filter_var() : فلترة متغير واحد مع فلتر محدد .

  • filter_var_array() : فلترة متغيرات متعددة مع فلترات متشابهة أو مختلفة .

  • filter_input : الحصول على متغير لمدخل واحد و فلترته .

  • filter_input_array : الحصول على متغيرات لمدخلات متعددة و فلترتهم مع فلترات مختلفة او متشابهة .

في المثال التالي سنقوم بتفعيل رقم باستخدام الوظيفة filter_var() :
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>

تم استخدام الفلتر FILTER_VALIDATE_INT لفلترة متغير . بما أن الرقم فعال سيتم إظهار نتيجة الكود "Integer is valid" .

لو كان المتغير ليس رقماً ( مثل "123abc" ) سيتم إظهار نتيجة الكود "Integer is not valid" .

للحصول على قائمة كاملة للوظائف و الفلاتر يمكنك زيارة مرجع فلاتر PHP .



التفعيل Validating و التعقيم Sanitizing


هناك نوعين من الفلترة :

تفعيل الفلاتر 


  • تستخدم لتفعيل مدخل مستخدم .

  • تثبيت القواعد ( مثل تفعيل URL أو Email ) .

  • إعادة الأنواع المتوقعة من النجاج أو الفشل .

تعقيم الفلاتر 


  • تستخدم للمساح أو عدم السماح بحرف معين في النص .

  • لايوجد قواعد معينة للبيانات .

  • دائماً تعيد نص .




الخيارات و الرايات


تستخدم الخيارات والرايات لإضافة فلترة اضافية الى فلتر معين .

تختلف الخيارات والرايات مع اختلاف الفلاتر .

في المثال التالي قمنا بتفعيل رقم معين integer باستخدام filter_var() بالاضافة الى خيارات min_range و max_range :

<?php
$var=300;
$int_options = array(
"options"=>array
(
"min_range"=>0,
"max_range"=>256
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>

للحصول على قائمة كاملة للوظائف و الفلاتر يمكنك زيارة مرجع فلاتر PHP . يمكنك فحص كل فلتر لمشاهدة الخيارات و الرايات المتوفرة .



المدخلات المفعلة


دعنا نقوم بتفعيل مدخل للنموذج .

أول شيء يجب أن نقوم فيه هو تأكيد بأن بيانات الادخال التي نبحث عنها موجودة . ثم نقوم بفلترة البيانات المدخلة باستخدام الوظيفة filter_input() .

في المثال التالي سيتم ارسال مدخل المتغير "email" الى صفحة PHP :
<?php
if(!filter_has_var(INPUT_GET, "email"))
{
echo("Input type does not exist");
}
else
{
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
{
echo "E-Mail is not valid";
}
else
{
echo "E-Mail is valid";
}
}
?>

شرح المثال

يحتوي المثال السابق على مدخل تم ارساله الى باستخدام طريقة GET :

  1. سيفحص فيما اذا مدخل البريد email فعال و موجود باستخدام النوع GET .

  2. اذا كان المتغير موجود سيتم فحص فعالية البريد الالكتروني .



تعقيم المدخلات


دعونا نقوم بتنظيف الرابط URL المرسل من النموذج .

أولاً يجب التأكيد على أن البيانات المدخلة التي نبحث عنها موجودة . ثم نقوم بتعقيم البيانات المدخلة من خلال استخدام الوظيفة filter_input()

في المثال التالي سيتم ارسال مدخل المتغير url الى صفحة PHP :
<?php
if(!filter_has_var(INPUT_POST, "url"))
{
echo("Input type does not exist");
}
else
{
$url = filter_input(INPUT_POST,
"url", FILTER_SANITIZE_URL);
}
?>

شرح المثال

يحتوي المثال السابق على مدخل url تم ارساله الى باستخدام طريقة POST :

  1. سيفحص فيما اذا مدخل url فعال و موجود باستخدام النوع POST .

  2. اذا كان المتغير موجود سيتم تعقيم ( حذف الأحرف الغير فعالة ) و حفظها في المتغير $url .

اذا كان مدخلات المتغير نص عادي مثل http://www.exååmple.com/ سيتم اختيار الرابط الصحيح و تعقيمه من خلال المتغير $url كالتالي :
http://www.Example.com/




فلترة مدخلات متعددة


دائماً مايحتوي النموذج على واحد أو اكثر من مدخلات النصوص . ولتجنب استدعاء filter_var أو filter_input مرات و مرات يمكن استخدام filter_var_array أو filter_input_array .

في المثال التالي قيمنا باستخدام filter_input_array() لفلترة ثلاث متغيرات من نوع GET . المتغير من نوع GET المستلم هو الاسم والعمر و عنوان البريد الالكتروني :
<?php
$filters = array
(
"name" => array
(
"filter"=>FILTER_SANITIZE_STRING
),
"age" => array
(
"filter"=>FILTER_VALIDATE_INT,
"options"=>array
(
"min_range"=>1,
"max_range"=>120
)
),
"email"=> FILTER_VALIDATE_EMAIL,
);
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"])
{
echo("Age must be a number between 1 and 120.<br />");
}
elseif(!$result["email"])
{
echo("E-Mail is not valid.<br />");
}
else
{
echo("User input is valid");
}
?>

شرح المثال

يحتوي المثال السابق على ثلاث متغيرات ( الاسم و العمر و البريد ) تم ارسالهم الى البريد نفسه باستخدام الطريقة GET 


  1. تم ضبط مصفوفة تحتوي على متغيرات وفلاتر اسم المدخل المستخدمة مع متغير لمدخل محدد .

  2. استدعاء الوظيفة filter_input_array() مع متغيرات GET المدخلة و المصفوفة التي أنشأناها مسبقاً .

  3. فحص متغيرات العمر age و البريد الالكتروني email في متغير $result للمدخلات الغير فعالة .

يمكن أن يكون القيمة الثانية في الوظيفة filter_input_array() مصفوفة أو فلتر ID واحد .

اذا كان المتغير فلتر id واحد عندها سيتم فلترة جميع المتغيرات في مصفوفة مدخلات من خلال فلتر محدد .

اذا كان المتغير مصفوفة عندها يجب اتبّاع التعليمات التالية 


  • يجب أن يكون مرفق بمصفوفة تحتوي على متغير مدخل مثل وسم المصفوفة .

  • قيمة المصفوفة يجب أن تكون مفلترة id او مصفوفة تحدد فلتر او راية او خيار .



استدعاء الفلتر


يمكنك استدعاء وظيفة معرفة من خلال المستخدم و استخدامه كفلتر باستخدام ميزة FILTER_CALLBACK . و بهذه الطريقة لديك تحكم كامل بفلترة البيانات .

يمكنك إنشاء وظفة خاصة للمستخدم او استخدام وظائف PHP الحالية .

الوظيفة التي ترغب باستخدامها لفلترتها محددة بنفس الطريقة كخيار مخصص .

في المثال التالي سيتم إنشاء وظيفة تقوم بتحويل جميع "_" الى فراغات :
<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>

ستظهر النتيجة على المتصفح كالتالي :
Peter is a great guy!
 

شرح المثال

في المثال التالي سيتم إنشاء وظيفة تقوم بتحويل جميع "_" الى فراغات :

  • إنشاء function لاستبدال "_" الى فراغات .

  • استدعاء filter_var() مع الفلتر FILTER_CALLBACK و مصفوفة تحتوي على function .




يتم التشغيل بواسطة Blogger.