PHP Filter (Filter)

PHP ফিল্টারগুলি নিরাপদ না থাকা সূত্র থেকে আসা ডাটা, যেমন ব্যবহারকারীর ইনপুট সত্যায়ন ও ফিল্টারিং করে।

PHP ফিল্টার কী বলা হয়?

PHP ফিল্টারগুলি নিরাপদ না থাকা সূত্র থেকে আসা ডাটা সত্যায়ন ও ফিল্টারিং করে।

ব্যবহারকারীর ইনপুট বা কাস্টম ডাটা সত্যায়ন ও ফিল্টারিং কোনওভাবেই একটি Web অ্যাপলিকেশনের একটি গুরুত্বপূর্ণ অংশ।

PHP-এর ফিল্টার এক্সটেনশন ডিজাইনের উদ্দেশ্য হল ডাটা ফিল্টারিং করা সহজ এবং দ্রুত।

ফিল্টার কেন ব্যবহার করা হয়?

সমস্ত web অ্যাপলিকেশনগুলিরই বাইরের ইনপুট প্রয়োজন। এই ডাটা সাধারণত ব্যবহারকারী বা অন্য অ্যাপলিকেশন (যেমন web সার্ভিস) থেকে আসে। ফিল্টার ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে, অ্যাপলিকেশনটি সঠিক ইনপুট টাইপ পাবে。

আপনি সবসময় বাইরের ডাটা ফিল্টার করতে হবে!

ইনপুট ফিল্টারিং হল একটি অত্যন্ত গুরুত্বপূর্ণ অ্যাপ্লিকেশন সুরক্ষা বিষয়

কি বাইরের ডাটা?

  • ফর্ম থেকে ইনপুট ডাটা
  • কুকিজ
  • সার্ভার বিন্যাস
  • ডাটাবেস কোন্সুল ফলাফল

ফাংশন এবং ফিল্টার

বিন্যাসকে ফিল্টার করার জন্য, নিচের কোনও ফিল্টার ফাংশনটি ব্যবহার করুন:

  • 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"

যদি আমরা একটি অসংখ্যক ভাবের বিন্যাস ব্যবহার করি, তবে আউটপুট হবে: "Integer is not valid"。

সম্পূর্ণ ফাংশন এবং ফিল্টার তালিকা পাওয়ার জন্য, আমাদের PHP Filter রেফারেন্স ম্যানুয়েল

Validating এবং Sanitizing

দুইটি ফিল্টার আছে:

Validating ফিল্টার:

  • ব্যবহারকারীর ইনপুটকে পরীক্ষা করার জন্য
  • সত্যিকারী ফরম্যাট নিয়ন্ত্রণ (যেমন URL বা E-Mail পরীক্ষা)
  • সফল হলে প্রত্যাশিত ধরন ফিরিয়ে দেয়, এক্সেপশন করলে FALSE ফিরিয়ে দেয়

Sanitizing ফিল্টার:

  • স্ট্রিংয়ের নির্দিষ্ট অক্ষরকে অনুমতি দেওয়া বা নিষিদ্ধ করার জন্য
  • কোন ডাটা ফরম্যাট নিয়ন্ত্রণ নেই
  • সবসময় স্ট্রিং ফিরিয়ে দেয়

বিকল্প এবং সংজ্ঞা

বিকল্প এবং সংজ্ঞা ব্যবহার করা হয় নির্দিষ্ট ফিল্টারকে অতিরিক্ত ফিল্টার বিকল্প যোগ করার জন্য。

ভিন্ন ফিল্টারগুলির বিকল্প এবং সংজ্ঞা আছে。

এই উদাহরণে, আমরা 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");
 }
?>

উপরোক্ত কোডের মতো, অপশনগুলি "options" নামক সংশ্লিষ্ট আর্রেইজে রাখতে হবে। সংকেত ব্যবহার করলে, আর্রেইজে রাখা নয়।

যেহেতু সংখ্যা "300" হল, তা নির্দিষ্ট সীমার মধ্যে নেই, তাই এই কোডের আউটপুট "Integer is not valid" হবে。

সম্পূর্ণ ফাংশন এবং ফিল্টার তালিকার জন্য CodeW3C.com-এ যান: PHP Filter রেফারেন্স ম্যানুয়েলআপনি প্রত্যেকটি ফিল্টারের উপলব্ধ বিকল্প এবং সংকেতগুলি দেখতে পাবেন。

ইনপুট পরীক্ষা

ফর্ম থেকে পাঠিত ইনপুটকে পরীক্ষা করার চেষ্টা করি。

আমাদের প্রথম কাজ হবে আমাদের অনুসন্ধানের জন্য ইনপুট ডাটা রয়েছে কি না নিশ্চিত করা。

তারপর, আমরা 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";
  }
 }
?>

Example Explanation:

উপরোক্ত উদাহরণে একটি "GET" পদ্ধতিতে পাঠানো ইনপুট ভেক্টর (email) আছে:

  1. পরীক্ষা করা হবে কি "GET" ধরনের "email" ইনপুট ভেক্টর রয়েছে কি
  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);
 }
?>

Example Explanation:

উপরোক্ত উদাহরণে একটি "POST" পদ্ধতিতে পাঠানো ইনপুট ভেক্টর (url) আছে:

  1. পরীক্ষা করা হবে কি "POST" ধরনের "url" ইনপুট ভেক্টর রয়েছে কি
  2. যদি এই ইনপুট ভেক্টর থাকে, তবে তাকে পরিশোধিত (অনৈতিক অক্ষরগুলি মোছে দেওয়া) এবং $url ভেক্টরে সংরক্ষণ করা হবে

যদি ইনপুট ভেক্টর এমনভাবে হোক: "http://www.W3非o法ol.com.c字符n/" তবে পরিশোধিত হওয়া $url ভেক্টর এমনভাবে হবে:

http://www.codew3c.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");
 }
?>

Example Explanation:

উপরোক্ত উদাহরণে তিনটি "GET" পদ্ধতিতে পাঠানো ইনপুট বিন্যাস থাকে (নাম, বয়স এবং ইমেইল)

  1. একটি অ্যারে সেট করুন যাতে ইনপুট বিন্যাসগুলোর নাম থাকে এবং নির্দিষ্ট ইনপুট বিন্যাসকে ফিল্টার করার জন্য ব্যবহৃত হয়
  2. filter_input_array() ফাংশন কল করুন, পারামিটারগুলো হল GET ইনপুট বিন্যাস এবং সাম্প্রতিকভাবে সেট করা অ্যারে
  3. result বিন্যাসকে "age" এবং "email" বিন্যাসকে অবৈধ ইনপুট সম্পর্কে পরীক্ষা করুন (যদি অবৈধ ইনপুট থাকে)

filter_input_array() ফাংশনের দ্বিতীয় পারামিটার একটি অ্যারে বা একক ফিল্টারার আইডি হতে পারে。

যদি এই পারামিটার একটি একক ফিল্টারার আইডি হয়, তবে এই নির্দিষ্ট ফিল্টার ইনপুট অ্যারেতে সমস্ত মান ফিল্টার করবে。

যদি এই পারামিটার একটি অ্যারে হয়, তবে এই অ্যারেটি নিচের নিয়ম অনুসরণ করতে হবে:

  • It must be an associative array containing the input variables as the keys of the array (for example, the "age" input variable)
  • The value of this array must be the ID of the filter, or an array that specifies the filter, flags, and options

Using Filter Callback

By using the FILTER_CALLBACK filter, you can call a custom function and use it as a filter. In this way, we have complete control over data filtering.

You can create your own custom function or use existing PHP functions.

Specify the method you want to use for the filter function, just like specifying the option method.

In the following example, we use a custom function to convert all "_" to spaces:

<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>

The result of the above code is as follows:

Peter is a great guy!

Example Explanation:

The above example converts all "_" to spaces:

  1. Create a function that replaces "_" with a space
  2. Call the filter_var() function, its parameters are FILTER_CALLBACK filter and an array containing our function